From c624d23260d5c136bebdd3a0734876527cedc505 Mon Sep 17 00:00:00 2001 From: Tulio Magno Quites Machado Filho Date: Tue, 29 May 2018 17:52:24 -0300 Subject: Add a generic scalb implementation This is a preparatory patch to enable building a _Float128 variant to ease reuse when building a _Float128 variant to alias this long double only symbol. Notably, stubs are added where missing to the native _Float128 sysdep dir to prevent building these newly templated variants created inside the build directories. Also noteworthy are the changes around LIBM_SVID_COMPAT. These changes are not intuitive. The templated version is only enabled when !LIBM_SVID_COMPAT, and the compat version is predicated entirely on LIBM_SVID_COMPAT. Thus, exactly one is stubbed out entirely when building. The nldbl scalb compat files are updated to account for this. Likewise, fixup the reuse of m68k's e_scalb{f,l}.c to include it's override of e_scalb.c. Otherwise, the search path finds the templated copy in the build directory. This could be futher simplified by providing an overridden template, but I lack the hardware to verify. --- math/e_scalbl.c | 54 ------------------------------------------------------ 1 file changed, 54 deletions(-) delete mode 100644 math/e_scalbl.c (limited to 'math/e_scalbl.c') diff --git a/math/e_scalbl.c b/math/e_scalbl.c deleted file mode 100644 index 6595ec6c27..0000000000 --- a/math/e_scalbl.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 2011-2020 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 2011. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include -#include -#include - -static long double -__attribute__ ((noinline)) -invalid_fn (long double x, long double fn) -{ - if (rintl (fn) != fn) - return (fn - fn) / (fn - fn); - else if (fn > 65000.0L) - return __scalbnl (x, 65000); - else - return __scalbnl (x,-65000); -} - - -long double -__ieee754_scalbl (long double x, long double fn) -{ - if (__glibc_unlikely (isnan (x))) - return x * fn; - if (__glibc_unlikely (!isfinite (fn))) - { - if (isnan (fn) || fn > 0.0L) - return x * fn; - if (x == 0.0L) - return x; - return x / -fn; - } - if (__glibc_unlikely (fabsl (fn) >= 0x1p31L || (long double) (int) fn != fn)) - return invalid_fn (x, fn); - - return __scalbnl (x, (int) fn); -} -libm_alias_finite (__ieee754_scalbl, __scalbl) -- cgit 1.4.1