diff options
-rw-r--r-- | lib/builtins/fixunsdfdi.c | 1 | ||||
-rw-r--r-- | lib/builtins/fixunsdfti.c | 2 | ||||
-rw-r--r-- | lib/builtins/fixunssfdi.c | 1 |
3 files changed, 3 insertions, 1 deletions
diff --git a/lib/builtins/fixunsdfdi.c b/lib/builtins/fixunsdfdi.c index b93d1c10b..2e0d87eac 100644 --- a/lib/builtins/fixunsdfdi.c +++ b/lib/builtins/fixunsdfdi.c @@ -21,6 +21,7 @@ ARM_EABI_FNALIAS(d2ulz, fixunsdfdi) COMPILER_RT_ABI du_int __fixunsdfdi(double a) { + if (a <= 0.0) return 0; su_int high = a/0x1p32f; su_int low = a - (double)high*0x1p32f; return ((du_int)high << 32) | low; diff --git a/lib/builtins/fixunsdfti.c b/lib/builtins/fixunsdfti.c index c3d7df97f..f8046a026 100644 --- a/lib/builtins/fixunsdfti.c +++ b/lib/builtins/fixunsdfti.c @@ -17,7 +17,7 @@ typedef tu_int fixuint_t; #include "fp_fixuint_impl.inc" COMPILER_RT_ABI tu_int -__fixunsdftti(fp_t a) { +__fixunsdfti(fp_t a) { return __fixuint(a); } #endif /* CRT_HAS_128BIT */ diff --git a/lib/builtins/fixunssfdi.c b/lib/builtins/fixunssfdi.c index 374ebbe82..5a154e82c 100644 --- a/lib/builtins/fixunssfdi.c +++ b/lib/builtins/fixunssfdi.c @@ -21,6 +21,7 @@ ARM_EABI_FNALIAS(f2ulz, fixunssfdi) COMPILER_RT_ABI du_int __fixunssfdi(float a) { + if (a <= 0.0f) return 0; double da = a; su_int high = da/0x1p32f; su_int low = da - (double)high*0x1p32f; |