diff options
Diffstat (limited to '05/tcc-0.9.27/lib')
-rw-r--r-- | 05/tcc-0.9.27/lib/libtcc1.c | 9 |
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 */ |