diff options
| author | Thomas Preud'homme <robotux@celest.fr> | 2014-02-05 16:09:54 +0800 |
|---|---|---|
| committer | Thomas Preud'homme <robotux@celest.fr> | 2014-02-05 16:09:54 +0800 |
| commit | 0ab07f39a63e1c183126a6b79db96819907e26dd (patch) | |
| tree | 4910d11b6a1b75fae3a68797ed35dd8e2cf6d20c /lib/armeabi.c | |
| parent | 02d2ca8ac77e8deaa494199f79624176df6a2b6c (diff) | |
| download | tinycc-0ab07f39a63e1c183126a6b79db96819907e26dd.tar.gz tinycc-0ab07f39a63e1c183126a6b79db96819907e26dd.tar.bz2 | |
Fix float to long long conversion on ARM
Fix float to long long conversion on ARM when the result would fit in an
int.
Diffstat (limited to 'lib/armeabi.c')
| -rw-r--r-- | lib/armeabi.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/lib/armeabi.c b/lib/armeabi.c index e787ec1..616b9b5 100644 --- a/lib/armeabi.c +++ b/lib/armeabi.c @@ -34,7 +34,7 @@ REGS_RETURN(double_unsigned_struct, double_unsigned_struct) /* float to [unsigned] long long conversion */ -#define DEFINE__AEABIT_F2XLZ(name, with_sign) \ +#define DEFINE__AEABI_F2XLZ(name, with_sign) \ void __aeabi_ ## name(unsigned val) \ { \ int exp, high_shift, sign; \ @@ -74,7 +74,7 @@ void __aeabi_ ## name(unsigned val) \ if (exp > FLOAT_FRAC_BITS) \ ret.low |= val << (exp - FLOAT_FRAC_BITS); \ else \ - ret.low = val >> (FLOAT_FRAC_BITS - exp); \ + ret.low |= val >> (FLOAT_FRAC_BITS - exp); \ } \ \ /* encode negative integer using 2's complement */ \ @@ -92,13 +92,13 @@ void __aeabi_ ## name(unsigned val) \ } /* float to unsigned long long conversion */ -DEFINE__AEABIT_F2XLZ(f2ulz, 0) +DEFINE__AEABI_F2XLZ(f2ulz, 0) /* float to long long conversion */ -DEFINE__AEABIT_F2XLZ(f2lz, 1) +DEFINE__AEABI_F2XLZ(f2lz, 1) /* double to [unsigned] long long conversion */ -#define DEFINE__AEABIT_D2XLZ(name, with_sign) \ +#define DEFINE__AEABI_D2XLZ(name, with_sign) \ void __aeabi_ ## name(double_unsigned_struct val) \ { \ int exp, high_shift, sign; \ @@ -143,7 +143,7 @@ void __aeabi_ ## name(double_unsigned_struct val) \ ret.low |= val.high << high_shift; \ ret.low |= val.low >> (32 - high_shift); \ } else \ - ret.low = val.high >> (DOUBLE_FRAC_BITS - 32 - exp); \ + ret.low |= val.high >> (DOUBLE_FRAC_BITS - 32 - exp); \ } \ \ /* encode negative integer using 2's complement */ \ @@ -161,10 +161,10 @@ void __aeabi_ ## name(double_unsigned_struct val) \ } /* double to unsigned long long conversion */ -DEFINE__AEABIT_D2XLZ(d2ulz, 0) +DEFINE__AEABI_D2XLZ(d2ulz, 0) /* double to long long conversion */ -DEFINE__AEABIT_D2XLZ(d2lz, 1) +DEFINE__AEABI_D2XLZ(d2lz, 1) /* long long to float conversion */ #define DEFINE__AEABI_XL2F(name, with_sign) \ |
