diff --git a/lib/armeabi.c b/lib/armeabi.c index 047a259c..f4d93071 100644 --- a/lib/armeabi.c +++ b/lib/armeabi.c @@ -177,7 +177,7 @@ void __aeabi_ ## name(double_unsigned_struct val) \ ret.high = 0; \ ret.low = 1 << exp; \ if (exp > DOUBLE_FRAC_BITS - 32) { \ - high_shift = exp - DOUBLE_FRAC_BITS - 32; \ + high_shift = exp - (DOUBLE_FRAC_BITS - 32); \ ret.low |= val.high << high_shift; \ ret.low |= val.low >> (32 - high_shift); \ } else \ diff --git a/tests/tests2/111_conversion.c b/tests/tests2/111_conversion.c index c0815e1e..071cf2ac 100644 --- a/tests/tests2/111_conversion.c +++ b/tests/tests2/111_conversion.c @@ -14,9 +14,11 @@ conv (union u *p) int main (void) { union u v; + double d = 1234567890.0; v.ld = 42; conv (&v); printf ("%lu\n", v.ul); + printf ("%llu\n", (unsigned long long)d); return 0; } diff --git a/tests/tests2/111_conversion.expect b/tests/tests2/111_conversion.expect index d81cc071..616f2682 100644 --- a/tests/tests2/111_conversion.expect +++ b/tests/tests2/111_conversion.expect @@ -1 +1,2 @@ 42 +1234567890