math: move x87-family lrint functions to C with inline asm

This commit is contained in:
Alexander Monakov 2020-01-11 18:14:24 +03:00 committed by Rich Felker
parent 6bbdbfdcde
commit 9443f1b5cf
16 changed files with 64 additions and 60 deletions

8
src/math/i386/llrint.c Normal file
View file

@ -0,0 +1,8 @@
#include <math.h>
long long llrint(double x)
{
long long r;
__asm__ ("fistpll %0" : "=m"(r) : "t"(x) : "st");
return r;
}

View file

@ -1,8 +0,0 @@
.global llrint
.type llrint,@function
llrint:
fldl 4(%esp)
fistpll 4(%esp)
mov 4(%esp),%eax
mov 8(%esp),%edx
ret

8
src/math/i386/llrintf.c Normal file
View file

@ -0,0 +1,8 @@
#include <math.h>
long long llrintf(float x)
{
long long r;
__asm__ ("fistpll %0" : "=m"(r) : "t"(x) : "st");
return r;
}

View file

@ -1,9 +0,0 @@
.global llrintf
.type llrintf,@function
llrintf:
sub $8,%esp
flds 12(%esp)
fistpll (%esp)
pop %eax
pop %edx
ret

8
src/math/i386/llrintl.c Normal file
View file

@ -0,0 +1,8 @@
#include <math.h>
long long llrintl(long double x)
{
long long r;
__asm__ ("fistpll %0" : "=m"(r) : "t"(x) : "st");
return r;
}

View file

@ -1,8 +0,0 @@
.global llrintl
.type llrintl,@function
llrintl:
fldt 4(%esp)
fistpll 4(%esp)
mov 4(%esp),%eax
mov 8(%esp),%edx
ret

8
src/math/i386/lrint.c Normal file
View file

@ -0,0 +1,8 @@
#include <math.h>
long lrint(double x)
{
long r;
__asm__ ("fistpl %0" : "=m"(r) : "t"(x) : "st");
return r;
}

View file

@ -1,7 +0,0 @@
.global lrint
.type lrint,@function
lrint:
fldl 4(%esp)
fistpl 4(%esp)
mov 4(%esp),%eax
ret

8
src/math/i386/lrintf.c Normal file
View file

@ -0,0 +1,8 @@
#include <math.h>
long lrintf(float x)
{
long r;
__asm__ ("fistpl %0" : "=m"(r) : "t"(x) : "st");
return r;
}

View file

@ -1,7 +0,0 @@
.global lrintf
.type lrintf,@function
lrintf:
flds 4(%esp)
fistpl 4(%esp)
mov 4(%esp),%eax
ret

8
src/math/i386/lrintl.c Normal file
View file

@ -0,0 +1,8 @@
#include <math.h>
long lrintl(long double x)
{
long r;
__asm__ ("fistpl %0" : "=m"(r) : "t"(x) : "st");
return r;
}

View file

@ -1,7 +0,0 @@
.global lrintl
.type lrintl,@function
lrintl:
fldt 4(%esp)
fistpl 4(%esp)
mov 4(%esp),%eax
ret

View file

@ -0,0 +1,8 @@
#include <math.h>
long long llrintl(long double x)
{
long long r;
__asm__ ("fistpll %0" : "=m"(r) : "t"(x) : "st");
return r;
}

View file

@ -1,7 +0,0 @@
.global llrintl
.type llrintl,@function
llrintl:
fldt 8(%rsp)
fistpll 8(%rsp)
mov 8(%rsp),%rax
ret

8
src/math/x86_64/lrintl.c Normal file
View file

@ -0,0 +1,8 @@
#include <math.h>
long lrintl(long double x)
{
long r;
__asm__ ("fistpll %0" : "=m"(r) : "t"(x) : "st");
return r;
}

View file

@ -1,7 +0,0 @@
.global lrintl
.type lrintl,@function
lrintl:
fldt 8(%rsp)
fistpll 8(%rsp)
mov 8(%rsp),%rax
ret