diff options
| author | seyko <seyko2@gmail.com> | 2015-03-03 22:38:31 +0300 |
|---|---|---|
| committer | seyko <seyko2@gmail.com> | 2015-03-03 22:38:31 +0300 |
| commit | 4b61f7f04b674a4a89431cf856bf3b8b1cf19edc (patch) | |
| tree | d29ce6563ae61924e4535bb92f8f47a5387870ec /win32 | |
| parent | dfbb00c1062849de5e3489359e17c318d4134d16 (diff) | |
| download | tinycc-4b61f7f04b674a4a89431cf856bf3b8b1cf19edc.tar.gz tinycc-4b61f7f04b674a4a89431cf856bf3b8b1cf19edc.tar.bz2 | |
A lrint functions in win32/include/math.h are rewrittem because tcc can't handle "t" constraint
Diffstat (limited to 'win32')
| -rw-r--r-- | win32/include/math.h | 45 |
1 files changed, 30 insertions, 15 deletions
diff --git a/win32/include/math.h b/win32/include/math.h index 4fe64e7..37a8ec4 100644 --- a/win32/include/math.h +++ b/win32/include/math.h @@ -515,21 +515,30 @@ extern "C" { __CRT_INLINE double __cdecl rint (double x) { double retval; - __asm__ ("frndint;": "=t" (retval) : "0" (x)); + __asm__ ( + "fldl %1\n" + "frndint \n" + "fstl %0\n" : "=m" (retval) : "m" (x)); return retval; } __CRT_INLINE float __cdecl rintf (float x) { float retval; - __asm__ ("frndint;" : "=t" (retval) : "0" (x) ); + __asm__ ( + "flds %1\n" + "frndint \n" + "fsts %0\n" : "=m" (retval) : "m" (x)); return retval; } __CRT_INLINE long double __cdecl rintl (long double x) { long double retval; - __asm__ ("frndint;" : "=t" (retval) : "0" (x) ); + __asm__ ( + "fldt %1\n" + "frndint \n" + "fstt %0\n" : "=m" (retval) : "m" (x)); return retval; } @@ -537,48 +546,54 @@ extern "C" { __CRT_INLINE long __cdecl lrint (double x) { long retval; - __asm__ __volatile__ \ - ("fistpl %0" : "=m" (retval) : "t" (x) : "st"); \ + __asm__ __volatile__ \ + ("fldl %1\n" \ + "fistpl %0" : "=m" (retval) : "m" (x)); \ return retval; } __CRT_INLINE long __cdecl lrintf (float x) { long retval; - __asm__ __volatile__ \ - ("fistpl %0" : "=m" (retval) : "t" (x) : "st"); \ + __asm__ __volatile__ \ + ("flds %1\n" \ + "fistpl %0" : "=m" (retval) : "m" (x)); \ return retval; } __CRT_INLINE long __cdecl lrintl (long double x) { long retval; - __asm__ __volatile__ \ - ("fistpl %0" : "=m" (retval) : "t" (x) : "st"); \ + __asm__ __volatile__ \ + ("fldt %1\n" \ + "fistpl %0" : "=m" (retval) : "m" (x)); \ return retval; } __CRT_INLINE long long __cdecl llrint (double x) { long long retval; - __asm__ __volatile__ \ - ("fistpll %0" : "=m" (retval) : "t" (x) : "st"); \ + __asm__ __volatile__ \ + ("fldl %1\n" \ + "fistpll %0" : "=m" (retval) : "m" (x)); \ return retval; } __CRT_INLINE long long __cdecl llrintf (float x) { long long retval; - __asm__ __volatile__ \ - ("fistpll %0" : "=m" (retval) : "t" (x) : "st"); \ + __asm__ __volatile__ \ + ("flds %1\n" \ + "fistpll %0" : "=m" (retval) : "m" (x)); \ return retval; } __CRT_INLINE long long __cdecl llrintl (long double x) { long long retval; - __asm__ __volatile__ \ - ("fistpll %0" : "=m" (retval) : "t" (x) : "st"); \ + __asm__ __volatile__ \ + ("fldt %1\n" \ + "fistpll %0" : "=m" (retval) : "m" (x)); \ return retval; } |
