History

Fix float to long long conversion on ARM

Fix float to long long conversion on ARM when the result would fit in an int.

Thomas Preud'homme committed 12 years ago

Commit 0ab07f31 parent 02d2ca81 file · +8 −8Browse files

Unified · Split

lib/armeabi.c+8−8
@@ -34,7 +34,7 @@ REGS_RETURN(double_unsigned_struct, double_unsigned_struct) · 33 unmodified lines
3434
3535
3636 /* float to [unsigned] long long conversion */
37−#define DEFINE__AEABIT_F2XLZ(name, with_sign) \
37+#define DEFINE__AEABI_F2XLZ(name, with_sign) \
3838 void __aeabi_ ## name(unsigned val) \
3939 { \
4040 int exp, high_shift, sign; \
@@ -74,7 +74,7 @@ void __aeabi_ ## name(unsigned val) \ · 33 unmodified lines
7474 if (exp > FLOAT_FRAC_BITS) \
7575 ret.low |= val << (exp - FLOAT_FRAC_BITS); \
7676 else \
77− ret.low = val >> (FLOAT_FRAC_BITS - exp); \
77+ ret.low |= val >> (FLOAT_FRAC_BITS - exp); \
7878 } \
7979 \
8080 /* encode negative integer using 2's complement */ \
@@ -92,13 +92,13 @@ void __aeabi_ ## name(unsigned val) \ · 11 unmodified lines
9292 }
9393
9494 /* float to unsigned long long conversion */
95−DEFINE__AEABIT_F2XLZ(f2ulz, 0)
95+DEFINE__AEABI_F2XLZ(f2ulz, 0)
9696
9797 /* float to long long conversion */
98−DEFINE__AEABIT_F2XLZ(f2lz, 1)
98+DEFINE__AEABI_F2XLZ(f2lz, 1)
9999
100100 /* double to [unsigned] long long conversion */
101−#define DEFINE__AEABIT_D2XLZ(name, with_sign) \
101+#define DEFINE__AEABI_D2XLZ(name, with_sign) \
102102 void __aeabi_ ## name(double_unsigned_struct val) \
103103 { \
104104 int exp, high_shift, sign; \
@@ -143,7 +143,7 @@ void __aeabi_ ## name(double_unsigned_struct val) \ · 38 unmodified lines
143143 ret.low |= val.high << high_shift; \
144144 ret.low |= val.low >> (32 - high_shift); \
145145 } else \
146− ret.low = val.high >> (DOUBLE_FRAC_BITS - 32 - exp); \
146+ ret.low |= val.high >> (DOUBLE_FRAC_BITS - 32 - exp); \
147147 } \
148148 \
149149 /* encode negative integer using 2's complement */ \
@@ -161,10 +161,10 @@ void __aeabi_ ## name(double_unsigned_struct val) \ · 11 unmodified lines
161161 }
162162
163163 /* double to unsigned long long conversion */
164−DEFINE__AEABIT_D2XLZ(d2ulz, 0)
164+DEFINE__AEABI_D2XLZ(d2ulz, 0)
165165
166166 /* double to long long conversion */
167−DEFINE__AEABIT_D2XLZ(d2lz, 1)
167+DEFINE__AEABI_D2XLZ(d2lz, 1)
168168
169169 /* long long to float conversion */
170170 #define DEFINE__AEABI_XL2F(name, with_sign) \

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t