math: move x87-family lrint functions to C with inline asm
This commit is contained in:
committed by
Rich Felker
parent
6bbdbfdcde
commit
9443f1b5cf
@@ -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;
|
||||
}
|
||||
@@ -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
|
||||
@@ -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;
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
.global llrintf
|
||||
.type llrintf,@function
|
||||
llrintf:
|
||||
sub $8,%esp
|
||||
flds 12(%esp)
|
||||
fistpll (%esp)
|
||||
pop %eax
|
||||
pop %edx
|
||||
ret
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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
|
||||
@@ -0,0 +1,8 @@
|
||||
#include <math.h>
|
||||
|
||||
long lrint(double x)
|
||||
{
|
||||
long r;
|
||||
__asm__ ("fistpl %0" : "=m"(r) : "t"(x) : "st");
|
||||
return r;
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
.global lrint
|
||||
.type lrint,@function
|
||||
lrint:
|
||||
fldl 4(%esp)
|
||||
fistpl 4(%esp)
|
||||
mov 4(%esp),%eax
|
||||
ret
|
||||
@@ -0,0 +1,8 @@
|
||||
#include <math.h>
|
||||
|
||||
long lrintf(float x)
|
||||
{
|
||||
long r;
|
||||
__asm__ ("fistpl %0" : "=m"(r) : "t"(x) : "st");
|
||||
return r;
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
.global lrintf
|
||||
.type lrintf,@function
|
||||
lrintf:
|
||||
flds 4(%esp)
|
||||
fistpl 4(%esp)
|
||||
mov 4(%esp),%eax
|
||||
ret
|
||||
@@ -0,0 +1,8 @@
|
||||
#include <math.h>
|
||||
|
||||
long lrintl(long double x)
|
||||
{
|
||||
long r;
|
||||
__asm__ ("fistpl %0" : "=m"(r) : "t"(x) : "st");
|
||||
return r;
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
.global lrintl
|
||||
.type lrintl,@function
|
||||
lrintl:
|
||||
fldt 4(%esp)
|
||||
fistpl 4(%esp)
|
||||
mov 4(%esp),%eax
|
||||
ret
|
||||
@@ -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;
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
.global llrintl
|
||||
.type llrintl,@function
|
||||
llrintl:
|
||||
fldt 8(%rsp)
|
||||
fistpll 8(%rsp)
|
||||
mov 8(%rsp),%rax
|
||||
ret
|
||||
@@ -0,0 +1,8 @@
|
||||
#include <math.h>
|
||||
|
||||
long lrintl(long double x)
|
||||
{
|
||||
long r;
|
||||
__asm__ ("fistpll %0" : "=m"(r) : "t"(x) : "st");
|
||||
return r;
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
.global lrintl
|
||||
.type lrintl,@function
|
||||
lrintl:
|
||||
fldt 8(%rsp)
|
||||
fistpll 8(%rsp)
|
||||
mov 8(%rsp),%rax
|
||||
ret
|
||||
Reference in New Issue
Block a user