From 230ade30261a44cd02ed689a34b953406d0cc677 Mon Sep 17 00:00:00 2001 From: Adrien Destugues Date: Tue, 31 Dec 2019 23:09:55 +0100 Subject: [PATCH] x86_64: use a working implementation of atan2 The "generic" files are actually not generic at all. They were imported for the PowerPC port and assume a matching format for float. However, x86 uses a different format as the values are stored with 80 bit precision in the FPU. Therefore the generic implementation is not appropriate whenever it does bit manipulations. The glibc implementation uses the same sourcecode as the x86 version for atan2, and there is no reason for us not to do the same. Should fix #14933 Change-Id: I9addcfdf8b0f980c8842480885b59c0133866756 Reviewed-on: https://review.haiku-os.org/c/haiku/+/2067 Reviewed-by: Adrien Destugues --- src/system/libroot/posix/glibc/arch/x86_64/Jamfile | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/system/libroot/posix/glibc/arch/x86_64/Jamfile b/src/system/libroot/posix/glibc/arch/x86_64/Jamfile index d92168d95e..43b5c57be8 100644 --- a/src/system/libroot/posix/glibc/arch/x86_64/Jamfile +++ b/src/system/libroot/posix/glibc/arch/x86_64/Jamfile @@ -32,7 +32,7 @@ local genericSources = mplog.c mpsqrt.c mptan.c sincos32.c slowexp.c slowpow.c e_acos.c e_acosf.c e_acosh.c e_acoshf.c e_acoshl.c e_asin.c e_asinf.c - e_asinl.c e_atan2.c e_atan2f.c e_atanh.c e_atanhf.c e_atanhl.c e_cosh.c + e_asinl.c e_atan2f.c e_atanh.c e_atanhf.c e_atanhl.c e_cosh.c e_coshf.c e_coshl.c e_exp.c e_exp10.c e_exp10f.c e_exp10l.c e_exp2.c e_exp2f.c e_expf.c e_fmod.c e_fmodf.c e_gamma_r.c e_gammaf_r.c e_gammal_r.c e_hypot.c e_hypotf.c e_hypotl.c e_ilogbl.c e_j0.c e_j0f.c e_j0l.c e_j1.c @@ -84,15 +84,17 @@ local genericSources = w_tgammal.c ; +local x86Sources = e_atan2.S ; + local architectureObject ; for architectureObject in [ MultiArchSubDirSetup x86_64 ] { on $(architectureObject) { local architecture = $(TARGET_PACKAGING_ARCH) ; MergeObject <$(architecture)>posix_gnu_arch_$(TARGET_ARCH)_e.o : - e_acosl.c e_atan2l.c e_exp2l.S e_expl.S e_fmodl.S e_log10l.S - e_log2l.S e_logl.S e_powl.S e_remainderl.S e_rem_pio2l.c e_scalbl.S - e_sqrt.c e_sqrtf.c e_sqrtl.c + e_acosl.c $(x86Sources) e_atan2l.c e_exp2l.S e_expl.S e_fmodl.S + e_log10l.S e_log2l.S e_logl.S e_powl.S e_remainderl.S e_rem_pio2l.c + e_scalbl.S e_sqrt.c e_sqrtf.c e_sqrtl.c ; @@ -138,6 +140,10 @@ for architectureObject in [ MultiArchSubDirSetup x86_64 ] { <$(architecture)>posix_gnu_arch_$(TARGET_ARCH)_generic.o ; + SEARCH on [ FGristFiles $(x86Sources) ] + = [ FDirName $(HAIKU_TOP) src system libroot posix glibc arch x86 ] ; + + SEARCH on [ FGristFiles $(genericSources) ] = [ FDirName $(HAIKU_TOP) src system libroot posix glibc arch generic ]