mirror of https://git.musl-libc.org/git/musl
committed by
Rich Felker
8 changed files with 38 additions and 44 deletions
@ -0,0 +1,10 @@ |
|||||
|
#include <math.h> |
||||
|
|
||||
|
double fmod(double x, double y) |
||||
|
{ |
||||
|
unsigned short fpsr; |
||||
|
// fprem does not introduce excess precision into x
|
||||
|
do __asm__ ("fprem; fnstsw %%ax" : "+t"(x), "=a"(fpsr) : "u"(y)); |
||||
|
while (fpsr & 0x400); |
||||
|
return x; |
||||
|
} |
||||
@ -1,11 +0,0 @@ |
|||||
.global fmod |
|
||||
.type fmod,@function |
|
||||
fmod: |
|
||||
fldl 12(%esp) |
|
||||
fldl 4(%esp) |
|
||||
1: fprem |
|
||||
fnstsw %ax |
|
||||
sahf |
|
||||
jp 1b |
|
||||
fstp %st(1) |
|
||||
ret |
|
||||
@ -0,0 +1,10 @@ |
|||||
|
#include <math.h> |
||||
|
|
||||
|
float fmodf(float x, float y) |
||||
|
{ |
||||
|
unsigned short fpsr; |
||||
|
// fprem does not introduce excess precision into x
|
||||
|
do __asm__ ("fprem; fnstsw %%ax" : "+t"(x), "=a"(fpsr) : "u"(y)); |
||||
|
while (fpsr & 0x400); |
||||
|
return x; |
||||
|
} |
||||
@ -1,11 +0,0 @@ |
|||||
.global fmodf |
|
||||
.type fmodf,@function |
|
||||
fmodf: |
|
||||
flds 8(%esp) |
|
||||
flds 4(%esp) |
|
||||
1: fprem |
|
||||
fnstsw %ax |
|
||||
sahf |
|
||||
jp 1b |
|
||||
fstp %st(1) |
|
||||
ret |
|
||||
@ -0,0 +1,9 @@ |
|||||
|
#include <math.h> |
||||
|
|
||||
|
long double fmodl(long double x, long double y) |
||||
|
{ |
||||
|
unsigned short fpsr; |
||||
|
do __asm__ ("fprem; fnstsw %%ax" : "+t"(x), "=a"(fpsr) : "u"(y)); |
||||
|
while (fpsr & 0x400); |
||||
|
return x; |
||||
|
} |
||||
@ -1,11 +0,0 @@ |
|||||
.global fmodl |
|
||||
.type fmodl,@function |
|
||||
fmodl: |
|
||||
fldt 16(%esp) |
|
||||
fldt 4(%esp) |
|
||||
1: fprem |
|
||||
fnstsw %ax |
|
||||
sahf |
|
||||
jp 1b |
|
||||
fstp %st(1) |
|
||||
ret |
|
||||
@ -0,0 +1,9 @@ |
|||||
|
#include <math.h> |
||||
|
|
||||
|
long double fmodl(long double x, long double y) |
||||
|
{ |
||||
|
unsigned short fpsr; |
||||
|
do __asm__ ("fprem; fnstsw %%ax" : "+t"(x), "=a"(fpsr) : "u"(y)); |
||||
|
while (fpsr & 0x400); |
||||
|
return x; |
||||
|
} |
||||
@ -1,11 +0,0 @@ |
|||||
.global fmodl |
|
||||
.type fmodl,@function |
|
||||
fmodl: |
|
||||
fldt 24(%rsp) |
|
||||
fldt 8(%rsp) |
|
||||
1: fprem |
|
||||
fnstsw %ax |
|
||||
testb $4,%ah |
|
||||
jnz 1b |
|
||||
fstp %st(1) |
|
||||
ret |
|
||||
Loading…
Reference in new issue