| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py | |
| ; RUN: llc < %s -O2 -mtriple=x86_64-linux-gnu \ | |
| ; RUN: -enable-legalize-types-checking \ | |
| ; RUN: | FileCheck %s --check-prefix=GNU | |
| ; RUN: llc < %s -O2 -mtriple=i686-linux-gnu -mattr=+sse2 \ | |
| ; RUN: -enable-legalize-types-checking \ | |
| ; RUN: | FileCheck %s --check-prefix=X86 | |
| ; These strict fp128 libcall operations only have a libcall on targets whose | |
| ; libc provides the f128-suffixed math functions (glibc). The android/windows | |
| ; variants have no libcall (and i686 windows crashes on strict fma); they are | |
| ; covered by fp128-libcalls-strict.ll (arithmetic/compare only). | |
| define fp128 @fma(fp128 %x, fp128 %y, fp128 %z) nounwind strictfp { | |
| ; GNU-LABEL: fma: | |
| ; GNU: # %bb.0: # %entry | |
| ; GNU-NEXT: pushq %rax | |
| ; GNU-NEXT: callq fmaf128@PLT | |
| ; GNU-NEXT: popq %rax | |
| ; GNU-NEXT: retq | |
| ; | |
| ; X86-LABEL: fma: | |
| ; X86: # %bb.0: # %entry | |
| ; X86-NEXT: pushl %ebp | |
| ; X86-NEXT: pushl %ebx | |
| ; X86-NEXT: pushl %edi | |
| ; X86-NEXT: pushl %esi | |
| ; X86-NEXT: subl $92, %esp | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %ebp | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %ebx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edi | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %ecx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %edx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %esi, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %edi, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %ebx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, (%esp) | |
| ; X86-NEXT: calll fmaf128 | |
| ; X86-NEXT: subl $4, %esp | |
| ; X86-NEXT: movaps {{[0-9]+}}(%esp), %xmm0 | |
| ; X86-NEXT: movaps %xmm0, (%ebp) | |
| ; X86-NEXT: movl %ebp, %eax | |
| ; X86-NEXT: addl $92, %esp | |
| ; X86-NEXT: popl %esi | |
| ; X86-NEXT: popl %edi | |
| ; X86-NEXT: popl %ebx | |
| ; X86-NEXT: popl %ebp | |
| ; X86-NEXT: retl $4 | |
| entry: | |
| %fma = call fp128 @llvm.experimental.constrained.fma.f128(fp128 %x, fp128 %y, fp128 %z, metadata !"round.dynamic", metadata !"fpexcept.strict") #0 | |
| ret fp128 %fma | |
| } | |
| define fp128 @frem(fp128 %x, fp128 %y) nounwind strictfp { | |
| ; GNU-LABEL: frem: | |
| ; GNU: # %bb.0: # %entry | |
| ; GNU-NEXT: pushq %rax | |
| ; GNU-NEXT: callq fmodf128@PLT | |
| ; GNU-NEXT: popq %rax | |
| ; GNU-NEXT: retq | |
| ; | |
| ; X86-LABEL: frem: | |
| ; X86: # %bb.0: # %entry | |
| ; X86-NEXT: pushl %ebp | |
| ; X86-NEXT: pushl %ebx | |
| ; X86-NEXT: pushl %edi | |
| ; X86-NEXT: pushl %esi | |
| ; X86-NEXT: subl $76, %esp | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edi | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %ebx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %ebp | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %ecx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %ebp, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %ebx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %edi, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %edx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, (%esp) | |
| ; X86-NEXT: calll fmodf128 | |
| ; X86-NEXT: subl $4, %esp | |
| ; X86-NEXT: movaps {{[0-9]+}}(%esp), %xmm0 | |
| ; X86-NEXT: movaps %xmm0, (%esi) | |
| ; X86-NEXT: movl %esi, %eax | |
| ; X86-NEXT: addl $76, %esp | |
| ; X86-NEXT: popl %esi | |
| ; X86-NEXT: popl %edi | |
| ; X86-NEXT: popl %ebx | |
| ; X86-NEXT: popl %ebp | |
| ; X86-NEXT: retl $4 | |
| entry: | |
| %div = call fp128 @llvm.experimental.constrained.frem.f128(fp128 %x, fp128 %y, metadata !"round.dynamic", metadata !"fpexcept.strict") #0 | |
| ret fp128 %div | |
| } | |
| define fp128 @ceil(fp128 %x) nounwind strictfp { | |
| ; GNU-LABEL: ceil: | |
| ; GNU: # %bb.0: # %entry | |
| ; GNU-NEXT: pushq %rax | |
| ; GNU-NEXT: callq ceilf128@PLT | |
| ; GNU-NEXT: popq %rax | |
| ; GNU-NEXT: retq | |
| ; | |
| ; X86-LABEL: ceil: | |
| ; X86: # %bb.0: # %entry | |
| ; X86-NEXT: pushl %edi | |
| ; X86-NEXT: pushl %esi | |
| ; X86-NEXT: subl $52, %esp | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edi | |
| ; X86-NEXT: movl %edi, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %edx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %ecx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, (%esp) | |
| ; X86-NEXT: calll ceilf128 | |
| ; X86-NEXT: subl $4, %esp | |
| ; X86-NEXT: movaps {{[0-9]+}}(%esp), %xmm0 | |
| ; X86-NEXT: movaps %xmm0, (%esi) | |
| ; X86-NEXT: movl %esi, %eax | |
| ; X86-NEXT: addl $52, %esp | |
| ; X86-NEXT: popl %esi | |
| ; X86-NEXT: popl %edi | |
| ; X86-NEXT: retl $4 | |
| entry: | |
| %ceil = call fp128 @llvm.experimental.constrained.ceil.f128(fp128 %x, metadata !"fpexcept.strict") #0 | |
| ret fp128 %ceil | |
| } | |
| define fp128 @acos(fp128 %x) nounwind strictfp { | |
| ; GNU-LABEL: acos: | |
| ; GNU: # %bb.0: # %entry | |
| ; GNU-NEXT: pushq %rax | |
| ; GNU-NEXT: callq acosf128@PLT | |
| ; GNU-NEXT: popq %rax | |
| ; GNU-NEXT: retq | |
| ; | |
| ; X86-LABEL: acos: | |
| ; X86: # %bb.0: # %entry | |
| ; X86-NEXT: pushl %edi | |
| ; X86-NEXT: pushl %esi | |
| ; X86-NEXT: subl $52, %esp | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edi | |
| ; X86-NEXT: movl %edi, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %edx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %ecx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, (%esp) | |
| ; X86-NEXT: calll acosf128 | |
| ; X86-NEXT: subl $4, %esp | |
| ; X86-NEXT: movaps {{[0-9]+}}(%esp), %xmm0 | |
| ; X86-NEXT: movaps %xmm0, (%esi) | |
| ; X86-NEXT: movl %esi, %eax | |
| ; X86-NEXT: addl $52, %esp | |
| ; X86-NEXT: popl %esi | |
| ; X86-NEXT: popl %edi | |
| ; X86-NEXT: retl $4 | |
| entry: | |
| %acos = call fp128 @llvm.experimental.constrained.acos.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0 | |
| ret fp128 %acos | |
| } | |
| define fp128 @cos(fp128 %x) nounwind strictfp { | |
| ; GNU-LABEL: cos: | |
| ; GNU: # %bb.0: # %entry | |
| ; GNU-NEXT: pushq %rax | |
| ; GNU-NEXT: callq cosf128@PLT | |
| ; GNU-NEXT: popq %rax | |
| ; GNU-NEXT: retq | |
| ; | |
| ; X86-LABEL: cos: | |
| ; X86: # %bb.0: # %entry | |
| ; X86-NEXT: pushl %edi | |
| ; X86-NEXT: pushl %esi | |
| ; X86-NEXT: subl $52, %esp | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edi | |
| ; X86-NEXT: movl %edi, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %edx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %ecx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, (%esp) | |
| ; X86-NEXT: calll cosf128 | |
| ; X86-NEXT: subl $4, %esp | |
| ; X86-NEXT: movaps {{[0-9]+}}(%esp), %xmm0 | |
| ; X86-NEXT: movaps %xmm0, (%esi) | |
| ; X86-NEXT: movl %esi, %eax | |
| ; X86-NEXT: addl $52, %esp | |
| ; X86-NEXT: popl %esi | |
| ; X86-NEXT: popl %edi | |
| ; X86-NEXT: retl $4 | |
| entry: | |
| %cos = call fp128 @llvm.experimental.constrained.cos.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0 | |
| ret fp128 %cos | |
| } | |
| define fp128 @cosh(fp128 %x) nounwind strictfp { | |
| ; GNU-LABEL: cosh: | |
| ; GNU: # %bb.0: # %entry | |
| ; GNU-NEXT: pushq %rax | |
| ; GNU-NEXT: callq coshf128@PLT | |
| ; GNU-NEXT: popq %rax | |
| ; GNU-NEXT: retq | |
| ; | |
| ; X86-LABEL: cosh: | |
| ; X86: # %bb.0: # %entry | |
| ; X86-NEXT: pushl %edi | |
| ; X86-NEXT: pushl %esi | |
| ; X86-NEXT: subl $52, %esp | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edi | |
| ; X86-NEXT: movl %edi, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %edx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %ecx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, (%esp) | |
| ; X86-NEXT: calll coshf128 | |
| ; X86-NEXT: subl $4, %esp | |
| ; X86-NEXT: movaps {{[0-9]+}}(%esp), %xmm0 | |
| ; X86-NEXT: movaps %xmm0, (%esi) | |
| ; X86-NEXT: movl %esi, %eax | |
| ; X86-NEXT: addl $52, %esp | |
| ; X86-NEXT: popl %esi | |
| ; X86-NEXT: popl %edi | |
| ; X86-NEXT: retl $4 | |
| entry: | |
| %cosh = call fp128 @llvm.experimental.constrained.cosh.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0 | |
| ret fp128 %cosh | |
| } | |
| define fp128 @exp(fp128 %x) nounwind strictfp { | |
| ; GNU-LABEL: exp: | |
| ; GNU: # %bb.0: # %entry | |
| ; GNU-NEXT: pushq %rax | |
| ; GNU-NEXT: callq expf128@PLT | |
| ; GNU-NEXT: popq %rax | |
| ; GNU-NEXT: retq | |
| ; | |
| ; X86-LABEL: exp: | |
| ; X86: # %bb.0: # %entry | |
| ; X86-NEXT: pushl %edi | |
| ; X86-NEXT: pushl %esi | |
| ; X86-NEXT: subl $52, %esp | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edi | |
| ; X86-NEXT: movl %edi, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %edx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %ecx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, (%esp) | |
| ; X86-NEXT: calll expf128 | |
| ; X86-NEXT: subl $4, %esp | |
| ; X86-NEXT: movaps {{[0-9]+}}(%esp), %xmm0 | |
| ; X86-NEXT: movaps %xmm0, (%esi) | |
| ; X86-NEXT: movl %esi, %eax | |
| ; X86-NEXT: addl $52, %esp | |
| ; X86-NEXT: popl %esi | |
| ; X86-NEXT: popl %edi | |
| ; X86-NEXT: retl $4 | |
| entry: | |
| %exp = call fp128 @llvm.experimental.constrained.exp.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0 | |
| ret fp128 %exp | |
| } | |
| define fp128 @exp2(fp128 %x) nounwind strictfp { | |
| ; GNU-LABEL: exp2: | |
| ; GNU: # %bb.0: # %entry | |
| ; GNU-NEXT: pushq %rax | |
| ; GNU-NEXT: callq exp2f128@PLT | |
| ; GNU-NEXT: popq %rax | |
| ; GNU-NEXT: retq | |
| ; | |
| ; X86-LABEL: exp2: | |
| ; X86: # %bb.0: # %entry | |
| ; X86-NEXT: pushl %edi | |
| ; X86-NEXT: pushl %esi | |
| ; X86-NEXT: subl $52, %esp | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edi | |
| ; X86-NEXT: movl %edi, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %edx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %ecx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, (%esp) | |
| ; X86-NEXT: calll exp2f128 | |
| ; X86-NEXT: subl $4, %esp | |
| ; X86-NEXT: movaps {{[0-9]+}}(%esp), %xmm0 | |
| ; X86-NEXT: movaps %xmm0, (%esi) | |
| ; X86-NEXT: movl %esi, %eax | |
| ; X86-NEXT: addl $52, %esp | |
| ; X86-NEXT: popl %esi | |
| ; X86-NEXT: popl %edi | |
| ; X86-NEXT: retl $4 | |
| entry: | |
| %exp2 = call fp128 @llvm.experimental.constrained.exp2.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0 | |
| ret fp128 %exp2 | |
| } | |
| define fp128 @floor(fp128 %x) nounwind strictfp { | |
| ; GNU-LABEL: floor: | |
| ; GNU: # %bb.0: # %entry | |
| ; GNU-NEXT: pushq %rax | |
| ; GNU-NEXT: callq floorf128@PLT | |
| ; GNU-NEXT: popq %rax | |
| ; GNU-NEXT: retq | |
| ; | |
| ; X86-LABEL: floor: | |
| ; X86: # %bb.0: # %entry | |
| ; X86-NEXT: pushl %edi | |
| ; X86-NEXT: pushl %esi | |
| ; X86-NEXT: subl $52, %esp | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edi | |
| ; X86-NEXT: movl %edi, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %edx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %ecx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, (%esp) | |
| ; X86-NEXT: calll floorf128 | |
| ; X86-NEXT: subl $4, %esp | |
| ; X86-NEXT: movaps {{[0-9]+}}(%esp), %xmm0 | |
| ; X86-NEXT: movaps %xmm0, (%esi) | |
| ; X86-NEXT: movl %esi, %eax | |
| ; X86-NEXT: addl $52, %esp | |
| ; X86-NEXT: popl %esi | |
| ; X86-NEXT: popl %edi | |
| ; X86-NEXT: retl $4 | |
| entry: | |
| %floor = call fp128 @llvm.experimental.constrained.floor.f128(fp128 %x, metadata !"fpexcept.strict") #0 | |
| ret fp128 %floor | |
| } | |
| define fp128 @log(fp128 %x) nounwind strictfp { | |
| ; GNU-LABEL: log: | |
| ; GNU: # %bb.0: # %entry | |
| ; GNU-NEXT: pushq %rax | |
| ; GNU-NEXT: callq logf128@PLT | |
| ; GNU-NEXT: popq %rax | |
| ; GNU-NEXT: retq | |
| ; | |
| ; X86-LABEL: log: | |
| ; X86: # %bb.0: # %entry | |
| ; X86-NEXT: pushl %edi | |
| ; X86-NEXT: pushl %esi | |
| ; X86-NEXT: subl $52, %esp | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edi | |
| ; X86-NEXT: movl %edi, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %edx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %ecx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, (%esp) | |
| ; X86-NEXT: calll logf128 | |
| ; X86-NEXT: subl $4, %esp | |
| ; X86-NEXT: movaps {{[0-9]+}}(%esp), %xmm0 | |
| ; X86-NEXT: movaps %xmm0, (%esi) | |
| ; X86-NEXT: movl %esi, %eax | |
| ; X86-NEXT: addl $52, %esp | |
| ; X86-NEXT: popl %esi | |
| ; X86-NEXT: popl %edi | |
| ; X86-NEXT: retl $4 | |
| entry: | |
| %log = call fp128 @llvm.experimental.constrained.log.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0 | |
| ret fp128 %log | |
| } | |
| define fp128 @log10(fp128 %x) nounwind strictfp { | |
| ; GNU-LABEL: log10: | |
| ; GNU: # %bb.0: # %entry | |
| ; GNU-NEXT: pushq %rax | |
| ; GNU-NEXT: callq log10f128@PLT | |
| ; GNU-NEXT: popq %rax | |
| ; GNU-NEXT: retq | |
| ; | |
| ; X86-LABEL: log10: | |
| ; X86: # %bb.0: # %entry | |
| ; X86-NEXT: pushl %edi | |
| ; X86-NEXT: pushl %esi | |
| ; X86-NEXT: subl $52, %esp | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edi | |
| ; X86-NEXT: movl %edi, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %edx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %ecx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, (%esp) | |
| ; X86-NEXT: calll log10f128 | |
| ; X86-NEXT: subl $4, %esp | |
| ; X86-NEXT: movaps {{[0-9]+}}(%esp), %xmm0 | |
| ; X86-NEXT: movaps %xmm0, (%esi) | |
| ; X86-NEXT: movl %esi, %eax | |
| ; X86-NEXT: addl $52, %esp | |
| ; X86-NEXT: popl %esi | |
| ; X86-NEXT: popl %edi | |
| ; X86-NEXT: retl $4 | |
| entry: | |
| %log10 = call fp128 @llvm.experimental.constrained.log10.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0 | |
| ret fp128 %log10 | |
| } | |
| define fp128 @log2(fp128 %x) nounwind strictfp { | |
| ; GNU-LABEL: log2: | |
| ; GNU: # %bb.0: # %entry | |
| ; GNU-NEXT: pushq %rax | |
| ; GNU-NEXT: callq log2f128@PLT | |
| ; GNU-NEXT: popq %rax | |
| ; GNU-NEXT: retq | |
| ; | |
| ; X86-LABEL: log2: | |
| ; X86: # %bb.0: # %entry | |
| ; X86-NEXT: pushl %edi | |
| ; X86-NEXT: pushl %esi | |
| ; X86-NEXT: subl $52, %esp | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edi | |
| ; X86-NEXT: movl %edi, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %edx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %ecx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, (%esp) | |
| ; X86-NEXT: calll log2f128 | |
| ; X86-NEXT: subl $4, %esp | |
| ; X86-NEXT: movaps {{[0-9]+}}(%esp), %xmm0 | |
| ; X86-NEXT: movaps %xmm0, (%esi) | |
| ; X86-NEXT: movl %esi, %eax | |
| ; X86-NEXT: addl $52, %esp | |
| ; X86-NEXT: popl %esi | |
| ; X86-NEXT: popl %edi | |
| ; X86-NEXT: retl $4 | |
| entry: | |
| %log2 = call fp128 @llvm.experimental.constrained.log2.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0 | |
| ret fp128 %log2 | |
| } | |
| define fp128 @maxnum(fp128 %x, fp128 %y) nounwind strictfp { | |
| ; GNU-LABEL: maxnum: | |
| ; GNU: # %bb.0: # %entry | |
| ; GNU-NEXT: pushq %rax | |
| ; GNU-NEXT: callq fmaxf128@PLT | |
| ; GNU-NEXT: popq %rax | |
| ; GNU-NEXT: retq | |
| ; | |
| ; X86-LABEL: maxnum: | |
| ; X86: # %bb.0: # %entry | |
| ; X86-NEXT: pushl %ebp | |
| ; X86-NEXT: pushl %ebx | |
| ; X86-NEXT: pushl %edi | |
| ; X86-NEXT: pushl %esi | |
| ; X86-NEXT: subl $76, %esp | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edi | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %ebx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %ebp | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %ecx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %ebp, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %ebx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %edi, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %edx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, (%esp) | |
| ; X86-NEXT: calll fmaxf128 | |
| ; X86-NEXT: subl $4, %esp | |
| ; X86-NEXT: movaps {{[0-9]+}}(%esp), %xmm0 | |
| ; X86-NEXT: movaps %xmm0, (%esi) | |
| ; X86-NEXT: movl %esi, %eax | |
| ; X86-NEXT: addl $76, %esp | |
| ; X86-NEXT: popl %esi | |
| ; X86-NEXT: popl %edi | |
| ; X86-NEXT: popl %ebx | |
| ; X86-NEXT: popl %ebp | |
| ; X86-NEXT: retl $4 | |
| entry: | |
| %maxnum = call fp128 @llvm.experimental.constrained.maxnum.f128(fp128 %x, fp128 %y, metadata !"fpexcept.strict") #0 | |
| ret fp128 %maxnum | |
| } | |
| define fp128 @minnum(fp128 %x, fp128 %y) nounwind strictfp { | |
| ; GNU-LABEL: minnum: | |
| ; GNU: # %bb.0: # %entry | |
| ; GNU-NEXT: pushq %rax | |
| ; GNU-NEXT: callq fminf128@PLT | |
| ; GNU-NEXT: popq %rax | |
| ; GNU-NEXT: retq | |
| ; | |
| ; X86-LABEL: minnum: | |
| ; X86: # %bb.0: # %entry | |
| ; X86-NEXT: pushl %ebp | |
| ; X86-NEXT: pushl %ebx | |
| ; X86-NEXT: pushl %edi | |
| ; X86-NEXT: pushl %esi | |
| ; X86-NEXT: subl $76, %esp | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edi | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %ebx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %ebp | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %ecx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %ebp, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %ebx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %edi, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %edx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, (%esp) | |
| ; X86-NEXT: calll fminf128 | |
| ; X86-NEXT: subl $4, %esp | |
| ; X86-NEXT: movaps {{[0-9]+}}(%esp), %xmm0 | |
| ; X86-NEXT: movaps %xmm0, (%esi) | |
| ; X86-NEXT: movl %esi, %eax | |
| ; X86-NEXT: addl $76, %esp | |
| ; X86-NEXT: popl %esi | |
| ; X86-NEXT: popl %edi | |
| ; X86-NEXT: popl %ebx | |
| ; X86-NEXT: popl %ebp | |
| ; X86-NEXT: retl $4 | |
| entry: | |
| %minnum = call fp128 @llvm.experimental.constrained.minnum.f128(fp128 %x, fp128 %y, metadata !"fpexcept.strict") #0 | |
| ret fp128 %minnum | |
| } | |
| define fp128 @nearbyint(fp128 %x) nounwind strictfp { | |
| ; GNU-LABEL: nearbyint: | |
| ; GNU: # %bb.0: # %entry | |
| ; GNU-NEXT: pushq %rax | |
| ; GNU-NEXT: callq nearbyintf128@PLT | |
| ; GNU-NEXT: popq %rax | |
| ; GNU-NEXT: retq | |
| ; | |
| ; X86-LABEL: nearbyint: | |
| ; X86: # %bb.0: # %entry | |
| ; X86-NEXT: pushl %edi | |
| ; X86-NEXT: pushl %esi | |
| ; X86-NEXT: subl $52, %esp | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edi | |
| ; X86-NEXT: movl %edi, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %edx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %ecx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, (%esp) | |
| ; X86-NEXT: calll nearbyintf128 | |
| ; X86-NEXT: subl $4, %esp | |
| ; X86-NEXT: movaps {{[0-9]+}}(%esp), %xmm0 | |
| ; X86-NEXT: movaps %xmm0, (%esi) | |
| ; X86-NEXT: movl %esi, %eax | |
| ; X86-NEXT: addl $52, %esp | |
| ; X86-NEXT: popl %esi | |
| ; X86-NEXT: popl %edi | |
| ; X86-NEXT: retl $4 | |
| entry: | |
| %nearbyint = call fp128 @llvm.experimental.constrained.nearbyint.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0 | |
| ret fp128 %nearbyint | |
| } | |
| define fp128 @pow(fp128 %x, fp128 %y) nounwind strictfp { | |
| ; GNU-LABEL: pow: | |
| ; GNU: # %bb.0: # %entry | |
| ; GNU-NEXT: pushq %rax | |
| ; GNU-NEXT: callq powf128@PLT | |
| ; GNU-NEXT: popq %rax | |
| ; GNU-NEXT: retq | |
| ; | |
| ; X86-LABEL: pow: | |
| ; X86: # %bb.0: # %entry | |
| ; X86-NEXT: pushl %ebp | |
| ; X86-NEXT: pushl %ebx | |
| ; X86-NEXT: pushl %edi | |
| ; X86-NEXT: pushl %esi | |
| ; X86-NEXT: subl $76, %esp | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edi | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %ebx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %ebp | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %ecx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %ebp, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %ebx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %edi, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %edx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, (%esp) | |
| ; X86-NEXT: calll powf128 | |
| ; X86-NEXT: subl $4, %esp | |
| ; X86-NEXT: movaps {{[0-9]+}}(%esp), %xmm0 | |
| ; X86-NEXT: movaps %xmm0, (%esi) | |
| ; X86-NEXT: movl %esi, %eax | |
| ; X86-NEXT: addl $76, %esp | |
| ; X86-NEXT: popl %esi | |
| ; X86-NEXT: popl %edi | |
| ; X86-NEXT: popl %ebx | |
| ; X86-NEXT: popl %ebp | |
| ; X86-NEXT: retl $4 | |
| entry: | |
| %pow = call fp128 @llvm.experimental.constrained.pow.f128(fp128 %x, fp128 %y, metadata !"round.dynamic", metadata !"fpexcept.strict") #0 | |
| ret fp128 %pow | |
| } | |
| define fp128 @rint(fp128 %x) nounwind strictfp { | |
| ; GNU-LABEL: rint: | |
| ; GNU: # %bb.0: # %entry | |
| ; GNU-NEXT: pushq %rax | |
| ; GNU-NEXT: callq rintf128@PLT | |
| ; GNU-NEXT: popq %rax | |
| ; GNU-NEXT: retq | |
| ; | |
| ; X86-LABEL: rint: | |
| ; X86: # %bb.0: # %entry | |
| ; X86-NEXT: pushl %edi | |
| ; X86-NEXT: pushl %esi | |
| ; X86-NEXT: subl $52, %esp | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edi | |
| ; X86-NEXT: movl %edi, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %edx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %ecx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, (%esp) | |
| ; X86-NEXT: calll rintf128 | |
| ; X86-NEXT: subl $4, %esp | |
| ; X86-NEXT: movaps {{[0-9]+}}(%esp), %xmm0 | |
| ; X86-NEXT: movaps %xmm0, (%esi) | |
| ; X86-NEXT: movl %esi, %eax | |
| ; X86-NEXT: addl $52, %esp | |
| ; X86-NEXT: popl %esi | |
| ; X86-NEXT: popl %edi | |
| ; X86-NEXT: retl $4 | |
| entry: | |
| %rint = call fp128 @llvm.experimental.constrained.rint.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0 | |
| ret fp128 %rint | |
| } | |
| define fp128 @round(fp128 %x) nounwind strictfp { | |
| ; GNU-LABEL: round: | |
| ; GNU: # %bb.0: # %entry | |
| ; GNU-NEXT: pushq %rax | |
| ; GNU-NEXT: callq roundf128@PLT | |
| ; GNU-NEXT: popq %rax | |
| ; GNU-NEXT: retq | |
| ; | |
| ; X86-LABEL: round: | |
| ; X86: # %bb.0: # %entry | |
| ; X86-NEXT: pushl %edi | |
| ; X86-NEXT: pushl %esi | |
| ; X86-NEXT: subl $52, %esp | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edi | |
| ; X86-NEXT: movl %edi, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %edx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %ecx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, (%esp) | |
| ; X86-NEXT: calll roundf128 | |
| ; X86-NEXT: subl $4, %esp | |
| ; X86-NEXT: movaps {{[0-9]+}}(%esp), %xmm0 | |
| ; X86-NEXT: movaps %xmm0, (%esi) | |
| ; X86-NEXT: movl %esi, %eax | |
| ; X86-NEXT: addl $52, %esp | |
| ; X86-NEXT: popl %esi | |
| ; X86-NEXT: popl %edi | |
| ; X86-NEXT: retl $4 | |
| entry: | |
| %round = call fp128 @llvm.experimental.constrained.round.f128(fp128 %x, metadata !"fpexcept.strict") #0 | |
| ret fp128 %round | |
| } | |
| define fp128 @roundeven(fp128 %x) nounwind strictfp { | |
| ; GNU-LABEL: roundeven: | |
| ; GNU: # %bb.0: # %entry | |
| ; GNU-NEXT: pushq %rax | |
| ; GNU-NEXT: callq roundevenf128@PLT | |
| ; GNU-NEXT: popq %rax | |
| ; GNU-NEXT: retq | |
| ; | |
| ; X86-LABEL: roundeven: | |
| ; X86: # %bb.0: # %entry | |
| ; X86-NEXT: pushl %edi | |
| ; X86-NEXT: pushl %esi | |
| ; X86-NEXT: subl $52, %esp | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edi | |
| ; X86-NEXT: movl %edi, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %edx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %ecx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, (%esp) | |
| ; X86-NEXT: calll roundevenf128 | |
| ; X86-NEXT: subl $4, %esp | |
| ; X86-NEXT: movaps {{[0-9]+}}(%esp), %xmm0 | |
| ; X86-NEXT: movaps %xmm0, (%esi) | |
| ; X86-NEXT: movl %esi, %eax | |
| ; X86-NEXT: addl $52, %esp | |
| ; X86-NEXT: popl %esi | |
| ; X86-NEXT: popl %edi | |
| ; X86-NEXT: retl $4 | |
| entry: | |
| %roundeven = call fp128 @llvm.experimental.constrained.roundeven.f128(fp128 %x, metadata !"fpexcept.strict") #0 | |
| ret fp128 %roundeven | |
| } | |
| define fp128 @asin(fp128 %x) nounwind strictfp { | |
| ; GNU-LABEL: asin: | |
| ; GNU: # %bb.0: # %entry | |
| ; GNU-NEXT: pushq %rax | |
| ; GNU-NEXT: callq asinf128@PLT | |
| ; GNU-NEXT: popq %rax | |
| ; GNU-NEXT: retq | |
| ; | |
| ; X86-LABEL: asin: | |
| ; X86: # %bb.0: # %entry | |
| ; X86-NEXT: pushl %edi | |
| ; X86-NEXT: pushl %esi | |
| ; X86-NEXT: subl $52, %esp | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edi | |
| ; X86-NEXT: movl %edi, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %edx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %ecx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, (%esp) | |
| ; X86-NEXT: calll asinf128 | |
| ; X86-NEXT: subl $4, %esp | |
| ; X86-NEXT: movaps {{[0-9]+}}(%esp), %xmm0 | |
| ; X86-NEXT: movaps %xmm0, (%esi) | |
| ; X86-NEXT: movl %esi, %eax | |
| ; X86-NEXT: addl $52, %esp | |
| ; X86-NEXT: popl %esi | |
| ; X86-NEXT: popl %edi | |
| ; X86-NEXT: retl $4 | |
| entry: | |
| %asin = call fp128 @llvm.experimental.constrained.asin.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0 | |
| ret fp128 %asin | |
| } | |
| define fp128 @sin(fp128 %x) nounwind strictfp { | |
| ; GNU-LABEL: sin: | |
| ; GNU: # %bb.0: # %entry | |
| ; GNU-NEXT: pushq %rax | |
| ; GNU-NEXT: callq sinf128@PLT | |
| ; GNU-NEXT: popq %rax | |
| ; GNU-NEXT: retq | |
| ; | |
| ; X86-LABEL: sin: | |
| ; X86: # %bb.0: # %entry | |
| ; X86-NEXT: pushl %edi | |
| ; X86-NEXT: pushl %esi | |
| ; X86-NEXT: subl $52, %esp | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edi | |
| ; X86-NEXT: movl %edi, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %edx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %ecx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, (%esp) | |
| ; X86-NEXT: calll sinf128 | |
| ; X86-NEXT: subl $4, %esp | |
| ; X86-NEXT: movaps {{[0-9]+}}(%esp), %xmm0 | |
| ; X86-NEXT: movaps %xmm0, (%esi) | |
| ; X86-NEXT: movl %esi, %eax | |
| ; X86-NEXT: addl $52, %esp | |
| ; X86-NEXT: popl %esi | |
| ; X86-NEXT: popl %edi | |
| ; X86-NEXT: retl $4 | |
| entry: | |
| %sin = call fp128 @llvm.experimental.constrained.sin.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0 | |
| ret fp128 %sin | |
| } | |
| define fp128 @sinh(fp128 %x) nounwind strictfp { | |
| ; GNU-LABEL: sinh: | |
| ; GNU: # %bb.0: # %entry | |
| ; GNU-NEXT: pushq %rax | |
| ; GNU-NEXT: callq sinhf128@PLT | |
| ; GNU-NEXT: popq %rax | |
| ; GNU-NEXT: retq | |
| ; | |
| ; X86-LABEL: sinh: | |
| ; X86: # %bb.0: # %entry | |
| ; X86-NEXT: pushl %edi | |
| ; X86-NEXT: pushl %esi | |
| ; X86-NEXT: subl $52, %esp | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edi | |
| ; X86-NEXT: movl %edi, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %edx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %ecx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, (%esp) | |
| ; X86-NEXT: calll sinhf128 | |
| ; X86-NEXT: subl $4, %esp | |
| ; X86-NEXT: movaps {{[0-9]+}}(%esp), %xmm0 | |
| ; X86-NEXT: movaps %xmm0, (%esi) | |
| ; X86-NEXT: movl %esi, %eax | |
| ; X86-NEXT: addl $52, %esp | |
| ; X86-NEXT: popl %esi | |
| ; X86-NEXT: popl %edi | |
| ; X86-NEXT: retl $4 | |
| entry: | |
| %sinh = call fp128 @llvm.experimental.constrained.sinh.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0 | |
| ret fp128 %sinh | |
| } | |
| define fp128 @sqrt(fp128 %x) nounwind strictfp { | |
| ; GNU-LABEL: sqrt: | |
| ; GNU: # %bb.0: # %entry | |
| ; GNU-NEXT: pushq %rax | |
| ; GNU-NEXT: callq sqrtf128@PLT | |
| ; GNU-NEXT: popq %rax | |
| ; GNU-NEXT: retq | |
| ; | |
| ; X86-LABEL: sqrt: | |
| ; X86: # %bb.0: # %entry | |
| ; X86-NEXT: pushl %edi | |
| ; X86-NEXT: pushl %esi | |
| ; X86-NEXT: subl $52, %esp | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edi | |
| ; X86-NEXT: movl %edi, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %edx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %ecx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, (%esp) | |
| ; X86-NEXT: calll sqrtf128 | |
| ; X86-NEXT: subl $4, %esp | |
| ; X86-NEXT: movaps {{[0-9]+}}(%esp), %xmm0 | |
| ; X86-NEXT: movaps %xmm0, (%esi) | |
| ; X86-NEXT: movl %esi, %eax | |
| ; X86-NEXT: addl $52, %esp | |
| ; X86-NEXT: popl %esi | |
| ; X86-NEXT: popl %edi | |
| ; X86-NEXT: retl $4 | |
| entry: | |
| %sqrt = call fp128 @llvm.experimental.constrained.sqrt.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0 | |
| ret fp128 %sqrt | |
| } | |
| define fp128 @atan(fp128 %x) nounwind strictfp { | |
| ; GNU-LABEL: atan: | |
| ; GNU: # %bb.0: # %entry | |
| ; GNU-NEXT: pushq %rax | |
| ; GNU-NEXT: callq atanf128@PLT | |
| ; GNU-NEXT: popq %rax | |
| ; GNU-NEXT: retq | |
| ; | |
| ; X86-LABEL: atan: | |
| ; X86: # %bb.0: # %entry | |
| ; X86-NEXT: pushl %edi | |
| ; X86-NEXT: pushl %esi | |
| ; X86-NEXT: subl $52, %esp | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edi | |
| ; X86-NEXT: movl %edi, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %edx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %ecx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, (%esp) | |
| ; X86-NEXT: calll atanf128 | |
| ; X86-NEXT: subl $4, %esp | |
| ; X86-NEXT: movaps {{[0-9]+}}(%esp), %xmm0 | |
| ; X86-NEXT: movaps %xmm0, (%esi) | |
| ; X86-NEXT: movl %esi, %eax | |
| ; X86-NEXT: addl $52, %esp | |
| ; X86-NEXT: popl %esi | |
| ; X86-NEXT: popl %edi | |
| ; X86-NEXT: retl $4 | |
| entry: | |
| %atan = call fp128 @llvm.experimental.constrained.atan.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0 | |
| ret fp128 %atan | |
| } | |
| define fp128 @atan2(fp128 %x, fp128 %y) nounwind strictfp { | |
| ; GNU-LABEL: atan2: | |
| ; GNU: # %bb.0: # %entry | |
| ; GNU-NEXT: pushq %rax | |
| ; GNU-NEXT: callq atan2f128@PLT | |
| ; GNU-NEXT: popq %rax | |
| ; GNU-NEXT: retq | |
| ; | |
| ; X86-LABEL: atan2: | |
| ; X86: # %bb.0: # %entry | |
| ; X86-NEXT: pushl %ebp | |
| ; X86-NEXT: pushl %ebx | |
| ; X86-NEXT: pushl %edi | |
| ; X86-NEXT: pushl %esi | |
| ; X86-NEXT: subl $76, %esp | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edi | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %ebx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %ebp | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %ecx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %ebp, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %ebx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %edi, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %edx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, (%esp) | |
| ; X86-NEXT: calll atan2f128 | |
| ; X86-NEXT: subl $4, %esp | |
| ; X86-NEXT: movaps {{[0-9]+}}(%esp), %xmm0 | |
| ; X86-NEXT: movaps %xmm0, (%esi) | |
| ; X86-NEXT: movl %esi, %eax | |
| ; X86-NEXT: addl $76, %esp | |
| ; X86-NEXT: popl %esi | |
| ; X86-NEXT: popl %edi | |
| ; X86-NEXT: popl %ebx | |
| ; X86-NEXT: popl %ebp | |
| ; X86-NEXT: retl $4 | |
| entry: | |
| %atan2 = call fp128 @llvm.experimental.constrained.atan2.f128(fp128 %x, fp128 %y, metadata !"round.dynamic", metadata !"fpexcept.strict") #0 | |
| ret fp128 %atan2 | |
| } | |
| define fp128 @tan(fp128 %x) nounwind strictfp { | |
| ; GNU-LABEL: tan: | |
| ; GNU: # %bb.0: # %entry | |
| ; GNU-NEXT: pushq %rax | |
| ; GNU-NEXT: callq tanf128@PLT | |
| ; GNU-NEXT: popq %rax | |
| ; GNU-NEXT: retq | |
| ; | |
| ; X86-LABEL: tan: | |
| ; X86: # %bb.0: # %entry | |
| ; X86-NEXT: pushl %edi | |
| ; X86-NEXT: pushl %esi | |
| ; X86-NEXT: subl $52, %esp | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edi | |
| ; X86-NEXT: movl %edi, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %edx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %ecx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, (%esp) | |
| ; X86-NEXT: calll tanf128 | |
| ; X86-NEXT: subl $4, %esp | |
| ; X86-NEXT: movaps {{[0-9]+}}(%esp), %xmm0 | |
| ; X86-NEXT: movaps %xmm0, (%esi) | |
| ; X86-NEXT: movl %esi, %eax | |
| ; X86-NEXT: addl $52, %esp | |
| ; X86-NEXT: popl %esi | |
| ; X86-NEXT: popl %edi | |
| ; X86-NEXT: retl $4 | |
| entry: | |
| %tan = call fp128 @llvm.experimental.constrained.tan.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0 | |
| ret fp128 %tan | |
| } | |
| define fp128 @tanh(fp128 %x) nounwind strictfp { | |
| ; GNU-LABEL: tanh: | |
| ; GNU: # %bb.0: # %entry | |
| ; GNU-NEXT: pushq %rax | |
| ; GNU-NEXT: callq tanhf128@PLT | |
| ; GNU-NEXT: popq %rax | |
| ; GNU-NEXT: retq | |
| ; | |
| ; X86-LABEL: tanh: | |
| ; X86: # %bb.0: # %entry | |
| ; X86-NEXT: pushl %edi | |
| ; X86-NEXT: pushl %esi | |
| ; X86-NEXT: subl $52, %esp | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edi | |
| ; X86-NEXT: movl %edi, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %edx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %ecx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, (%esp) | |
| ; X86-NEXT: calll tanhf128 | |
| ; X86-NEXT: subl $4, %esp | |
| ; X86-NEXT: movaps {{[0-9]+}}(%esp), %xmm0 | |
| ; X86-NEXT: movaps %xmm0, (%esi) | |
| ; X86-NEXT: movl %esi, %eax | |
| ; X86-NEXT: addl $52, %esp | |
| ; X86-NEXT: popl %esi | |
| ; X86-NEXT: popl %edi | |
| ; X86-NEXT: retl $4 | |
| entry: | |
| %tanh = call fp128 @llvm.experimental.constrained.tanh.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0 | |
| ret fp128 %tanh | |
| } | |
| define fp128 @trunc(fp128 %x) nounwind strictfp { | |
| ; GNU-LABEL: trunc: | |
| ; GNU: # %bb.0: # %entry | |
| ; GNU-NEXT: pushq %rax | |
| ; GNU-NEXT: callq truncf128@PLT | |
| ; GNU-NEXT: popq %rax | |
| ; GNU-NEXT: retq | |
| ; | |
| ; X86-LABEL: trunc: | |
| ; X86: # %bb.0: # %entry | |
| ; X86-NEXT: pushl %edi | |
| ; X86-NEXT: pushl %esi | |
| ; X86-NEXT: subl $52, %esp | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %esi | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edx | |
| ; X86-NEXT: movl {{[0-9]+}}(%esp), %edi | |
| ; X86-NEXT: movl %edi, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %edx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %ecx, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: movl %eax, {{[0-9]+}}(%esp) | |
| ; X86-NEXT: leal {{[0-9]+}}(%esp), %eax | |
| ; X86-NEXT: movl %eax, (%esp) | |
| ; X86-NEXT: calll truncf128 | |
| ; X86-NEXT: subl $4, %esp | |
| ; X86-NEXT: movaps {{[0-9]+}}(%esp), %xmm0 | |
| ; X86-NEXT: movaps %xmm0, (%esi) | |
| ; X86-NEXT: movl %esi, %eax | |
| ; X86-NEXT: addl $52, %esp | |
| ; X86-NEXT: popl %esi | |
| ; X86-NEXT: popl %edi | |
| ; X86-NEXT: retl $4 | |
| entry: | |
| %trunc = call fp128 @llvm.experimental.constrained.trunc.f128(fp128 %x, metadata !"fpexcept.strict") #0 | |
| ret fp128 %trunc | |
| } | |
| define i32 @lrint(fp128 %x) nounwind strictfp { | |
| ; GNU-LABEL: lrint: | |
| ; GNU: # %bb.0: # %entry | |
| ; GNU-NEXT: pushq %rax | |
| ; GNU-NEXT: callq lrintf128@PLT | |
| ; GNU-NEXT: popq %rcx | |
| ; GNU-NEXT: retq | |
| ; | |
| ; X86-LABEL: lrint: | |
| ; X86: # %bb.0: # %entry | |
| ; X86-NEXT: subl $12, %esp | |
| ; X86-NEXT: pushl {{[0-9]+}}(%esp) | |
| ; X86-NEXT: pushl {{[0-9]+}}(%esp) | |
| ; X86-NEXT: pushl {{[0-9]+}}(%esp) | |
| ; X86-NEXT: pushl {{[0-9]+}}(%esp) | |
| ; X86-NEXT: calll lrintf128 | |
| ; X86-NEXT: addl $28, %esp | |
| ; X86-NEXT: retl | |
| entry: | |
| %rint = call i32 @llvm.experimental.constrained.lrint.i32.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0 | |
| ret i32 %rint | |
| } | |
| define i64 @llrint(fp128 %x) nounwind strictfp { | |
| ; GNU-LABEL: llrint: | |
| ; GNU: # %bb.0: # %entry | |
| ; GNU-NEXT: pushq %rax | |
| ; GNU-NEXT: callq llrintf128@PLT | |
| ; GNU-NEXT: popq %rcx | |
| ; GNU-NEXT: retq | |
| ; | |
| ; X86-LABEL: llrint: | |
| ; X86: # %bb.0: # %entry | |
| ; X86-NEXT: subl $12, %esp | |
| ; X86-NEXT: pushl {{[0-9]+}}(%esp) | |
| ; X86-NEXT: pushl {{[0-9]+}}(%esp) | |
| ; X86-NEXT: pushl {{[0-9]+}}(%esp) | |
| ; X86-NEXT: pushl {{[0-9]+}}(%esp) | |
| ; X86-NEXT: calll llrintf128 | |
| ; X86-NEXT: addl $28, %esp | |
| ; X86-NEXT: retl | |
| entry: | |
| %rint = call i64 @llvm.experimental.constrained.llrint.i64.f128(fp128 %x, metadata !"round.dynamic", metadata !"fpexcept.strict") #0 | |
| ret i64 %rint | |
| } | |
| define i32 @lround(fp128 %x) nounwind strictfp { | |
| ; GNU-LABEL: lround: | |
| ; GNU: # %bb.0: # %entry | |
| ; GNU-NEXT: pushq %rax | |
| ; GNU-NEXT: callq lroundf128@PLT | |
| ; GNU-NEXT: popq %rcx | |
| ; GNU-NEXT: retq | |
| ; | |
| ; X86-LABEL: lround: | |
| ; X86: # %bb.0: # %entry | |
| ; X86-NEXT: subl $12, %esp | |
| ; X86-NEXT: pushl {{[0-9]+}}(%esp) | |
| ; X86-NEXT: pushl {{[0-9]+}}(%esp) | |
| ; X86-NEXT: pushl {{[0-9]+}}(%esp) | |
| ; X86-NEXT: pushl {{[0-9]+}}(%esp) | |
| ; X86-NEXT: calll lroundf128 | |
| ; X86-NEXT: addl $28, %esp | |
| ; X86-NEXT: retl | |
| entry: | |
| %round = call i32 @llvm.experimental.constrained.lround.i32.f128(fp128 %x, metadata !"fpexcept.strict") #0 | |
| ret i32 %round | |
| } | |
| define i64 @llround(fp128 %x) nounwind strictfp { | |
| ; GNU-LABEL: llround: | |
| ; GNU: # %bb.0: # %entry | |
| ; GNU-NEXT: pushq %rax | |
| ; GNU-NEXT: callq llroundf128@PLT | |
| ; GNU-NEXT: popq %rcx | |
| ; GNU-NEXT: retq | |
| ; | |
| ; X86-LABEL: llround: | |
| ; X86: # %bb.0: # %entry | |
| ; X86-NEXT: subl $12, %esp | |
| ; X86-NEXT: pushl {{[0-9]+}}(%esp) | |
| ; X86-NEXT: pushl {{[0-9]+}}(%esp) | |
| ; X86-NEXT: pushl {{[0-9]+}}(%esp) | |
| ; X86-NEXT: pushl {{[0-9]+}}(%esp) | |
| ; X86-NEXT: calll llroundf128 | |
| ; X86-NEXT: addl $28, %esp | |
| ; X86-NEXT: retl | |
| entry: | |
| %round = call i64 @llvm.experimental.constrained.llround.i64.f128(fp128 %x, metadata !"fpexcept.strict") #0 | |
| ret i64 %round | |
| } | |
| declare fp128 @llvm.experimental.constrained.fma.f128(fp128, fp128, fp128, metadata, metadata) | |
| declare fp128 @llvm.experimental.constrained.frem.f128(fp128, fp128, metadata, metadata) | |
| declare fp128 @llvm.experimental.constrained.ceil.f128(fp128, metadata) | |
| declare fp128 @llvm.experimental.constrained.acos.f128(fp128, metadata, metadata) | |
| declare fp128 @llvm.experimental.constrained.cos.f128(fp128, metadata, metadata) | |
| declare fp128 @llvm.experimental.constrained.cosh.f128(fp128, metadata, metadata) | |
| declare fp128 @llvm.experimental.constrained.exp.f128(fp128, metadata, metadata) | |
| declare fp128 @llvm.experimental.constrained.exp2.f128(fp128, metadata, metadata) | |
| declare fp128 @llvm.experimental.constrained.floor.f128(fp128, metadata) | |
| declare fp128 @llvm.experimental.constrained.log.f128(fp128, metadata, metadata) | |
| declare fp128 @llvm.experimental.constrained.log10.f128(fp128, metadata, metadata) | |
| declare fp128 @llvm.experimental.constrained.log2.f128(fp128, metadata, metadata) | |
| declare fp128 @llvm.experimental.constrained.maxnum.f128(fp128, fp128, metadata) | |
| declare fp128 @llvm.experimental.constrained.minnum.f128(fp128, fp128, metadata) | |
| declare fp128 @llvm.experimental.constrained.nearbyint.f128(fp128, metadata, metadata) | |
| declare fp128 @llvm.experimental.constrained.pow.f128(fp128, fp128, metadata, metadata) | |
| declare fp128 @llvm.experimental.constrained.rint.f128(fp128, metadata, metadata) | |
| declare fp128 @llvm.experimental.constrained.round.f128(fp128, metadata) | |
| declare fp128 @llvm.experimental.constrained.roundeven.f128(fp128, metadata) | |
| declare fp128 @llvm.experimental.constrained.asin.f128(fp128, metadata, metadata) | |
| declare fp128 @llvm.experimental.constrained.sin.f128(fp128, metadata, metadata) | |
| declare fp128 @llvm.experimental.constrained.sinh.f128(fp128, metadata, metadata) | |
| declare fp128 @llvm.experimental.constrained.sqrt.f128(fp128, metadata, metadata) | |
| declare fp128 @llvm.experimental.constrained.atan.f128(fp128, metadata, metadata) | |
| declare fp128 @llvm.experimental.constrained.atan2.f128(fp128, fp128, metadata, metadata) | |
| declare fp128 @llvm.experimental.constrained.tan.f128(fp128, metadata, metadata) | |
| declare fp128 @llvm.experimental.constrained.tanh.f128(fp128, metadata, metadata) | |
| declare fp128 @llvm.experimental.constrained.trunc.f128(fp128, metadata) | |
| declare i32 @llvm.experimental.constrained.lrint.i32.f128(fp128, metadata, metadata) | |
| declare i64 @llvm.experimental.constrained.llrint.i64.f128(fp128, metadata, metadata) | |
| declare i32 @llvm.experimental.constrained.lround.i32.f128(fp128, metadata) | |
| declare i64 @llvm.experimental.constrained.llround.i64.f128(fp128, metadata) | |
| attributes #0 = { nounwind strictfp } |