aboutsummaryrefslogtreecommitdiff
path: root/win32
diff options
context:
space:
mode:
authorseyko <seyko2@gmail.com>2015-11-05 14:27:41 +0300
committerseyko <seyko2@gmail.com>2015-11-05 14:27:41 +0300
commit45bc50596874ec7cb26aac3dca3339ba25086436 (patch)
tree2d2a84a36f8b70e9dd16bf185cd6f3bf3c1aa284 /win32
parentf7dd3d49ccf0949b28b61a309ffb5f9dbfc484b7 (diff)
downloadtinycc-45bc50596874ec7cb26aac3dca3339ba25086436.tar.gz
tinycc-45bc50596874ec7cb26aac3dca3339ba25086436.tar.bz2
win32/include/math.h: remoing a "t" modifier usage
replaced by loading a float argument from memory and using the "m" modifier
Diffstat (limited to 'win32')
-rw-r--r--win32/include/math.h41
1 files changed, 31 insertions, 10 deletions
diff --git a/win32/include/math.h b/win32/include/math.h
index 251d3f7..cfcfd9a 100644
--- a/win32/include/math.h
+++ b/win32/include/math.h
@@ -316,7 +316,10 @@ extern "C" {
__CRT_INLINE int __cdecl __fpclassifyl (long double x){
unsigned short sw;
- __asm__ ("fxam; fstsw %%ax;" : "=a" (sw): "t" (x));
+ __asm__ (
+ "fldt %1 \n"
+ "fxam \n"
+ "fstsw %0 \n" : "=a" (sw): "m" (x));
return sw & (FP_NAN | FP_NORMAL | FP_ZERO );
}
@@ -337,8 +340,11 @@ extern "C" {
__CRT_INLINE int __cdecl __isnan (double _x)
{
unsigned short sw;
- __asm__ ("fxam;"
- "fstsw %%ax": "=a" (sw) : "t" (_x));
+ __asm__ (
+ "fldl %1 \n"
+ "fxam \n"
+ "fstsw %0 \n" : "=a" (sw) : "m" (_x));
+
return (sw & (FP_NAN | FP_NORMAL | FP_INFINITE | FP_ZERO | FP_SUBNORMAL))
== FP_NAN;
}
@@ -346,8 +352,11 @@ extern "C" {
__CRT_INLINE int __cdecl __isnanf (float _x)
{
unsigned short sw;
- __asm__ ("fxam;"
- "fstsw %%ax": "=a" (sw) : "t" (_x));
+ __asm__ (
+ "flds %1 \n"
+ "fxam \n"
+ "fstsw %0 \n" : "=a" (sw) : "m" (_x));
+
return (sw & (FP_NAN | FP_NORMAL | FP_INFINITE | FP_ZERO | FP_SUBNORMAL))
== FP_NAN;
}
@@ -355,8 +364,11 @@ extern "C" {
__CRT_INLINE int __cdecl __isnanl (long double _x)
{
unsigned short sw;
- __asm__ ("fxam;"
- "fstsw %%ax": "=a" (sw) : "t" (_x));
+ __asm__ (
+ "fldt %1 \n"
+ "fxam \n"
+ "fstsw %0 \n" : "=a" (sw) : "m" (_x));
+
return (sw & (FP_NAN | FP_NORMAL | FP_INFINITE | FP_ZERO | FP_SUBNORMAL))
== FP_NAN;
}
@@ -372,19 +384,28 @@ extern "C" {
/* 7.12.3.6 The signbit macro */
__CRT_INLINE int __cdecl __signbit (double x) {
unsigned short stw;
- __asm__ ( "fxam; fstsw %%ax;": "=a" (stw) : "t" (x));
+ __asm__ (
+ "fldl %1 \n"
+ "fxam \n"
+ "fstsw %0 \n" : "=a" (stw) : "m" (x));
return stw & 0x0200;
}
__CRT_INLINE int __cdecl __signbitf (float x) {
unsigned short stw;
- __asm__ ("fxam; fstsw %%ax;": "=a" (stw) : "t" (x));
+ __asm__ (
+ "flds %1 \n"
+ "fxam \n"
+ "fstsw %0 \n" : "=a" (stw) : "m" (x));
return stw & 0x0200;
}
__CRT_INLINE int __cdecl __signbitl (long double x) {
unsigned short stw;
- __asm__ ("fxam; fstsw %%ax;": "=a" (stw) : "t" (x));
+ __asm__ (
+ "fldt %1 \n"
+ "fxam \n"
+ "fstsw %0 \n" : "=a" (stw) : "m" (x));
return stw & 0x0200;
}