summaryrefslogtreecommitdiff
path: root/05/tcc-0.9.27/lib
diff options
context:
space:
mode:
Diffstat (limited to '05/tcc-0.9.27/lib')
-rw-r--r--05/tcc-0.9.27/lib/libtcc1.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/05/tcc-0.9.27/lib/libtcc1.c b/05/tcc-0.9.27/lib/libtcc1.c
index 0e46618..633696b 100644
--- a/05/tcc-0.9.27/lib/libtcc1.c
+++ b/05/tcc-0.9.27/lib/libtcc1.c
@@ -613,10 +613,17 @@ unsigned long long __fixunsxfdi (long double a1)
return 0;
}
+
+static long double negate_ld(long double d) {
+ register unsigned long long *p = (unsigned long long *)&d;
+ p[1] ^= 1ul<<15;
+ return *(long double *)p;
+}
+
long long __fixxfdi (long double a1)
{
long long ret; int s;
- ret = __fixunsxfdi((s = a1 >= 0) ? a1 : -a1);
+ ret = __fixunsxfdi((s = a1 >= 0) ? a1 : negate_ld(a1));
return s ? ret : -ret;
}
#endif /* !ARM */