forked from OSchip/llvm-project
Fix float->uint conversion for inputs less than 0
Summary: The spec for these functions says that they should return 0 in this case but this regressed in r234148. That revision essentially delegates the conversion to the hardware, but that has different behavior on different platforms (e.g. it is wrong on x86). Also fix a typo in the name of __fixunsdfti Test Plan: The existing unit tests now pass Reviewers: joerg, howard.hinnant Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D9305 llvm-svn: 236319
This commit is contained in:
parent
5de990ebca
commit
de036eb170
|
@ -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;
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue