From: Andrei Tatar Date: Fri, 5 May 2023 18:19:26 +0000 (+0200) Subject: Update to LLVM 14.0.6 X-Git-Tag: RELEASE-0.14.0~5 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=23e891a531c30a655964561d18fd1b51da87adb6;p=unikraft%2Flibs%2Flibcxx.git Update to LLVM 14.0.6 Co-authored-by: Marco Schlumpp Signed-off-by: Marco Schlumpp Signed-off-by: Andrei Tatar Reviewed-by: Stefan Jumarea Reviewed-by: Maria Sfiraiala Reviewed-by: Razvan Deaconescu Approved-by: Eduard Vintilă Tested-by: Unikraft CI GitHub-Closes: #28 --- diff --git a/Makefile.uk b/Makefile.uk index 30eb0dd..fa4c38a 100644 --- a/Makefile.uk +++ b/Makefile.uk @@ -1,8 +1,11 @@ # libcxx Makefile.uk # # Authors: Vlad-Andrei Badoiu +# Marco Schlumpp +# Andrei Tatar # # Copyright (c) 2019, Politehnica University of Bucharest. All rights reserved. +# Copyright (c) 2023, Unikraft GmbH and The Unikraft Authors. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions @@ -39,8 +42,8 @@ $(eval $(call addlib_s,libcxx,$(CONFIG_LIBCXX))) ################################################################################ # Sources ################################################################################ -LIBCXX_VERSION=7.0.0 -LIBCXX_URL=http://releases.llvm.org/7.0.0/libcxx-7.0.0.src.tar.xz +LIBCXX_VERSION=14.0.6 +LIBCXX_URL=https://github.com/llvm/llvm-project/releases/download/llvmorg-$(LIBCXX_VERSION)/libcxx-$(LIBCXX_VERSION).src.tar.xz LIBCXX_PATCHDIR=$(LIBCXX_BASE)/patches $(eval $(call fetch,libcxx,$(LIBCXX_URL))) $(eval $(call patch,libcxx,$(LIBCXX_PATCHDIR),libcxx-$(LIBCXX_VERSION).src)) @@ -48,67 +51,49 @@ $(eval $(call patch,libcxx,$(LIBCXX_PATCHDIR),libcxx-$(LIBCXX_VERSION).src)) ################################################################################ # Helpers ################################################################################ -LIBCXX_SUBDIR=libcxx-$(LIBCXX_VERSION).src -LIBCXX_SRC = $(LIBCXX_ORIGIN)/$(LIBCXX_SUBDIR) +LIBCXX_SRC = $(LIBCXX_ORIGIN)/libcxx-$(LIBCXX_VERSION).src ################################################################################ # Library includes ################################################################################ -CXXINCLUDES-$(CONFIG_LIBCXX) += -I$(LIBCXX_BASE)/include CINCLUDES-$(CONFIG_LIBCXX) += -I$(LIBCXX_BASE)/include - CINCLUDES-$(CONFIG_LIBCXX) += -I$(LIBCXX_SRC)/src -CINCLUDES-$(CONFIG_LIBCXX) += -I$(LIBCXX_SRC)/fuzzing -CINCLUDES-$(CONFIG_LIBCXX) += -I$(LIBCXX_SRC)/cal -CINCLUDES-$(CONFIG_LIBCXX) += -I$(LIBCXX_SRC)/func -CINCLUDES-$(CONFIG_LIBCXX) += -I$(LIBCXX_SRC)/tuple -CINCLUDES-$(CONFIG_LIBCXX) += -I$(LIBCXX_SRC)/allocator -CINCLUDES-$(CONFIG_LIBCXX) += -I$(LIBCXX_SRC)/lib -CINCLUDES-$(CONFIG_LIBCXX) += -I$(LIBCXX_SRC)/auto -CINCLUDES-$(CONFIG_LIBCXX) += -I$(LIBCXX_SRC)/string -CINCLUDES-$(CONFIG_LIBCXX) += -I$(LIBCXX_SRC)/number -CINCLUDES-$(CONFIG_LIBCXX) += -I$(LIBCXX_SRC)/types -CINCLUDES-$(CONFIG_LIBCXX) += -I$(LIBCXX_SRC)/func CINCLUDES-$(CONFIG_LIBCXX) += -I$(LIBCXX_SRC)/include -CINCLUDES-$(CONFIG_LIBCXX) += -I$(LIBCXX_SRC)/utils + +CXXINCLUDES-$(CONFIG_LIBCXX) += -I$(LIBCXX_BASE)/include CXXINCLUDES-$(CONFIG_LIBCXX) += -I$(LIBCXX_SRC)/src -CXXINCLUDES-$(CONFIG_LIBCXX) += -I$(LIBCXX_SRC)/fuzzing -CXXINCLUDES-$(CONFIG_LIBCXX) += -I$(LIBCXX_SRC)/cal -CXXINCLUDES-$(CONFIG_LIBCXX) += -I$(LIBCXX_SRC)/func -CXXINCLUDES-$(CONFIG_LIBCXX) += -I$(LIBCXX_SRC)/tuple -CXXINCLUDES-$(CONFIG_LIBCXX) += -I$(LIBCXX_SRC)/allocator -CXXINCLUDES-$(CONFIG_LIBCXX) += -I$(LIBCXX_SRC)/lib -CXXINCLUDES-$(CONFIG_LIBCXX) += -I$(LIBCXX_SRC)/auto -CXXINCLUDES-$(CONFIG_LIBCXX) += -I$(LIBCXX_SRC)/string -CXXINCLUDES-$(CONFIG_LIBCXX) += -I$(LIBCXX_SRC)/number -CXXINCLUDES-$(CONFIG_LIBCXX) += -I$(LIBCXX_SRC)/types -CXXINCLUDES-$(CONFIG_LIBCXX) += -I$(LIBCXX_SRC)/func CXXINCLUDES-$(CONFIG_LIBCXX) += -I$(LIBCXX_SRC)/include -CXXINCLUDES-$(CONFIG_LIBCXX) += -I$(LIBCXX_SRC)/utils - -ifeq ($(CONFIG_LIBMUSL),y) -CINCLUDES-$(CONFIG_LIBCXX) += -I$(LIBCXX_SRC)/include/support/musl -CXXINCLUDES-$(CONFIG_LIBCXX) += -I$(LIBCXX_SRC)/include/support/musl -CINCLUDES-$(CONFIG_LIBCXX) += -I$(LIBCXX_SRC)/include/support/xlocale -CXXINCLUDES-$(CONFIG_LIBCXX) += -I$(LIBCXX_SRC)/include/support/xlocale -endif ################################################################################ # Global flags ################################################################################ -CONFIG_FLAGS += -D LIBCXX_BUILDING_LIBCXXABI -D _LIBCPP_STD_VER=15 \ - -D _LIBCPP_PROVIDES_DEFAULT_RUNE_TABLE -D __DYNAMIC_REENT__ \ +LIBCXX_CONFIG_FLAGS += -DLIBCXX_BUILDING_LIBCXXABI +LIBCXX_CONFIG_FLAGS += -D_LIBCPP_BUILDING_LIBRARY +LIBCXX_CONFIG_FLAGS += -D_LIBCPP_DISABLE_NEW_DELETE_DEFINITIONS +LIBCXX_CONFIG_FLAGS += -D_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER +LIBCXX_CONFIG_FLAGS += -D__STDC_CONSTANT_MACROS +LIBCXX_CONFIG_FLAGS += -D__STDC_FORMAT_MACROS +LIBCXX_CONFIG_FLAGS += -D__STDC_LIMIT_MACROS -ifdef CONFIG_CXX_THREADS -CONFIG_FLAGS += -D__linux__ -D_LIBCPP_HAS_THREAD_API_PTHREAD -else -CONFIG_FLAGS += -D_LIBCPP_HAS_NO_THREADS -endif +LIBCXX_SUPPRESS_FLAGS += -Wno-attributes +LIBCXX_SUPPRESS_FLAGS += -Wno-comment +LIBCXX_SUPPRESS_FLAGS += -Wno-error +LIBCXX_SUPPRESS_FLAGS += -Wno-literal-suffix +LIBCXX_SUPPRESS_FLAGS += -Wno-long-long +LIBCXX_SUPPRESS_FLAGS += -Wno-misleading-indentation +LIBCXX_SUPPRESS_FLAGS += -Wno-missing-field-initializers +LIBCXX_SUPPRESS_FLAGS += -Wno-unused-parameter +LIBCXX_SUPPRESS_FLAGS += -Wno-parentheses +LIBCXX_SUPPRESS_FLAGS += -Wno-deprecated-declarations +LIBCXX_SUPPRESS_FLAGS += -Wno-alloc-size-larger-than +LIBCXX_SUPPRESS_FLAGS += -Wno-maybe-uninitialized +LIBCXX_SUPPRESS_FLAGS += -Wno-array-bounds +LIBCXX_SUPPRESS_FLAGS += -Wno-cpp +LIBCXX_SUPPRESS_FLAGS += -Wno-stringop-overflow -LIBCXX_CFLAGS-y += $(CONFIG_FLAGS) -LIBCXX_CXXFLAGS-y += $(CONFIG_FLAGS) +LIBCXX_CFLAGS-y += $(LIBCXX_CONFIG_FLAGS) +LIBCXX_CXXFLAGS-y += $(LIBCXX_CONFIG_FLAGS) -std=c++2a -LIBCXX_SUPPRESS_FLAGS += -Wno-unused-parameter -Wno-cpp -Wno-parentheses LIBCXX_CFLAGS-y += $(LIBCXX_SUPPRESS_FLAGS) LIBCXX_CXXFLAGS-y += $(LIBCXX_SUPPRESS_FLAGS) @@ -118,24 +103,36 @@ LIBCXX_SRCS-y += $(LIBCXX_BASE)/glue.c ################################################################################ LIBCXX_SRCS-y += $(LIBCXX_SRC)/src/algorithm.cpp LIBCXX_SRCS-y += $(LIBCXX_SRC)/src/any.cpp +LIBCXX_SRCS-y += $(LIBCXX_SRC)/src/atomic.cpp +LIBCXX_SRCS-y += $(LIBCXX_SRC)/src/barrier.cpp LIBCXX_SRCS-y += $(LIBCXX_SRC)/src/bind.cpp LIBCXX_SRCS-y += $(LIBCXX_SRC)/src/charconv.cpp LIBCXX_SRCS-y += $(LIBCXX_SRC)/src/chrono.cpp LIBCXX_SRCS-y += $(LIBCXX_SRC)/src/condition_variable.cpp +LIBCXX_SRCS-y += $(LIBCXX_SRC)/src/condition_variable_destructor.cpp LIBCXX_SRCS-y += $(LIBCXX_SRC)/src/exception.cpp -LIBCXX_SRCS-y += $(LIBCXX_SRC)/src/experimental/memory_resource.cpp +LIBCXX_SRCS-y += $(LIBCXX_SRC)/src/filesystem/directory_iterator.cpp +LIBCXX_SRCS-y += $(LIBCXX_SRC)/src/filesystem/operations.cpp LIBCXX_SRCS-y += $(LIBCXX_SRC)/src/functional.cpp LIBCXX_SRCS-y += $(LIBCXX_SRC)/src/future.cpp LIBCXX_SRCS-y += $(LIBCXX_SRC)/src/hash.cpp LIBCXX_SRCS-y += $(LIBCXX_SRC)/src/ios.cpp +LIBCXX_SRCS-y += $(LIBCXX_SRC)/src/ios.instantiations.cpp LIBCXX_SRCS-y += $(LIBCXX_SRC)/src/iostream.cpp +LIBCXX_SRCS-y += $(LIBCXX_SRC)/src/legacy_pointer_safety.cpp LIBCXX_SRCS-y += $(LIBCXX_SRC)/src/locale.cpp LIBCXX_SRCS-y += $(LIBCXX_SRC)/src/memory.cpp +LIBCXX_SRCS-y += $(LIBCXX_SRC)/src/experimental/memory_resource.cpp LIBCXX_SRCS-y += $(LIBCXX_SRC)/src/mutex.cpp +LIBCXX_SRCS-y += $(LIBCXX_SRC)/src/mutex_destructor.cpp LIBCXX_SRCS-y += $(LIBCXX_SRC)/src/new.cpp LIBCXX_SRCS-y += $(LIBCXX_SRC)/src/optional.cpp LIBCXX_SRCS-y += $(LIBCXX_SRC)/src/random.cpp +LIBCXX_SRCS-y += $(LIBCXX_SRC)/src/random_shuffle.cpp LIBCXX_SRCS-y += $(LIBCXX_SRC)/src/regex.cpp +LIBCXX_SRCS-y += $(LIBCXX_SRC)/src/ryu/d2fixed.cpp +LIBCXX_SRCS-y += $(LIBCXX_SRC)/src/ryu/d2s.cpp +LIBCXX_SRCS-y += $(LIBCXX_SRC)/src/ryu/f2s.cpp LIBCXX_SRCS-y += $(LIBCXX_SRC)/src/shared_mutex.cpp LIBCXX_SRCS-y += $(LIBCXX_SRC)/src/stdexcept.cpp LIBCXX_SRCS-y += $(LIBCXX_SRC)/src/string.cpp @@ -147,3 +144,8 @@ LIBCXX_SRCS-y += $(LIBCXX_SRC)/src/utility.cpp LIBCXX_SRCS-y += $(LIBCXX_SRC)/src/valarray.cpp LIBCXX_SRCS-y += $(LIBCXX_SRC)/src/variant.cpp LIBCXX_SRCS-y += $(LIBCXX_SRC)/src/vector.cpp + +ifneq ($(CONFIG_LIBCOMPILER_RT),y) +# Compiler RT comes with an own implementation +LIBCXX_SRCS-y += $(LIBCXX_SRC)/src/filesystem/int128_builtins.cpp +endif diff --git a/include/__config_site b/include/__config_site new file mode 100644 index 0000000..56c08a8 --- /dev/null +++ b/include/__config_site @@ -0,0 +1,37 @@ +#ifndef _LIBCPP___CONFIG_SITE +#define _LIBCPP___CONFIG_SITE + +#include + +#define _LIBCPP_ABI_VERSION 1 +#define _LIBCPP_ABI_NAMESPACE __1 + +#ifdef CONFIG_CXX_THREADS +#define _LIBCPP_HAS_THREAD_API_PTHREAD +#if !defined(__linux__) +#define __linux__ +#endif +#else +#if !defined(_LIBCPP_HAS_NO_THREADS) +#define _LIBCPP_HAS_NO_THREADS +#endif +#endif + +#define _LIBCPP_PROVIDES_DEFAULT_RUNE_TABLE +#define _LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS +#define _LIBCPP_ENABLE_ASSERTIONS_DEFAULT 0 +#define _LIBCPP_HAS_NO_C11_ALIGNED_ALLOC 1 + +#if !defined(_LIBCPP_BUILDING_LIBRARY) +#define _LIBCPP_BUILDING_LIBRARY +#endif + +#if defined( __arm__) || defined(__ARM_64__) +#undef __FLT16_MANT_DIG__ +#endif + +#ifdef CONFIG_LIBMUSL +#define _LIBCPP_HAS_MUSL_LIBC +#endif + +#endif // _LIBCPP___CONFIG_SITE diff --git a/include/__config_unikraft b/include/__config_unikraft deleted file mode 100644 index 930e3d8..0000000 --- a/include/__config_unikraft +++ /dev/null @@ -1,19 +0,0 @@ -#include - -#ifdef CONFIG_CXX_THREADS -#if !defined(__linux__) -#define __linux__ -#endif -#else -#if !defined(_LIBCPP_HAS_NO_THREADS) -#define _LIBCPP_HAS_NO_THREADS -#endif -#endif - -#if !defined(_LIBCPP_BUILDING_LIBRARY) -#define _LIBCPP_BUILDING_LIBRARY -#endif - -#if defined( __arm__) || defined(__ARM_64__) -#undef __FLT16_MANT_DIG__ -#endif diff --git a/include/cmath b/include/cmath deleted file mode 100644 index 569dabc..0000000 --- a/include/cmath +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include_next diff --git a/include/features.h b/include/features.h deleted file mode 100644 index d882894..0000000 --- a/include/features.h +++ /dev/null @@ -1,49 +0,0 @@ -/* SPDX-License-Identifier: BSD-3-Clause */ -/* - * Copyright (c) 2019, University Politehnica of Bucharest - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the author nor the names of any co-contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ -#ifndef __LIBUNWIND__FEATURES_H__ -#define __LIBUNWIND__FEATURES_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -#ifdef CONFIG_LIBMUSL -#include -#else -#include -#endif - -#ifdef __cplusplus -} -#endif -#endif /* __LIBUNWIND__FEATURES_H__ */ - diff --git a/include/math.h b/include/math.h deleted file mode 100644 index db27ab6..0000000 --- a/include/math.h +++ /dev/null @@ -1 +0,0 @@ -#include_next diff --git a/include/stdlib.h b/include/stdlib.h deleted file mode 100644 index dab2be5..0000000 --- a/include/stdlib.h +++ /dev/null @@ -1,4 +0,0 @@ -#include -#include_next - - diff --git a/include/support/musl/math.h b/include/support/musl/math.h deleted file mode 100644 index 3cc72aa..0000000 --- a/include/support/musl/math.h +++ /dev/null @@ -1,1531 +0,0 @@ -// -*- C++ -*- -//===---------------------------- math.h ----------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#ifndef _LIBCPP_MATH_H -#define _LIBCPP_MATH_H - -/* - math.h synopsis - -Macros: - - HUGE_VAL - HUGE_VALF // C99 - HUGE_VALL // C99 - INFINITY // C99 - NAN // C99 - FP_INFINITE // C99 - FP_NAN // C99 - FP_NORMAL // C99 - FP_SUBNORMAL // C99 - FP_ZERO // C99 - FP_FAST_FMA // C99 - FP_FAST_FMAF // C99 - FP_FAST_FMAL // C99 - FP_ILOGB0 // C99 - FP_ILOGBNAN // C99 - MATH_ERRNO // C99 - MATH_ERREXCEPT // C99 - math_errhandling // C99 - -Types: - - float_t // C99 - double_t // C99 - -// C90 - -floating_point abs(floating_point x); - -floating_point acos (arithmetic x); -float acosf(float x); -long double acosl(long double x); - -floating_point asin (arithmetic x); -float asinf(float x); -long double asinl(long double x); - -floating_point atan (arithmetic x); -float atanf(float x); -long double atanl(long double x); - -floating_point atan2 (arithmetic y, arithmetic x); -float atan2f(float y, float x); -long double atan2l(long double y, long double x); - -floating_point ceil (arithmetic x); -float ceilf(float x); -long double ceill(long double x); - -floating_point cos (arithmetic x); -float cosf(float x); -long double cosl(long double x); - -floating_point cosh (arithmetic x); -float coshf(float x); -long double coshl(long double x); - -floating_point exp (arithmetic x); -float expf(float x); -long double expl(long double x); - -floating_point fabs (arithmetic x); -float fabsf(float x); -long double fabsl(long double x); - -floating_point floor (arithmetic x); -float floorf(float x); -long double floorl(long double x); - -floating_point fmod (arithmetic x, arithmetic y); -float fmodf(float x, float y); -long double fmodl(long double x, long double y); - -floating_point frexp (arithmetic value, int* exp); -float frexpf(float value, int* exp); -long double frexpl(long double value, int* exp); - -floating_point ldexp (arithmetic value, int exp); -float ldexpf(float value, int exp); -long double ldexpl(long double value, int exp); - -floating_point log (arithmetic x); -float logf(float x); -long double logl(long double x); - -floating_point log10 (arithmetic x); -float log10f(float x); -long double log10l(long double x); - -floating_point modf (floating_point value, floating_point* iptr); -float modff(float value, float* iptr); -long double modfl(long double value, long double* iptr); - -floating_point pow (arithmetic x, arithmetic y); -float powf(float x, float y); -long double powl(long double x, long double y); - -floating_point sin (arithmetic x); -float sinf(float x); -long double sinl(long double x); - -floating_point sinh (arithmetic x); -float sinhf(float x); -long double sinhl(long double x); - -floating_point sqrt (arithmetic x); -float sqrtf(float x); -long double sqrtl(long double x); - -floating_point tan (arithmetic x); -float tanf(float x); -long double tanl(long double x); - -floating_point tanh (arithmetic x); -float tanhf(float x); -long double tanhl(long double x); - -// C99 - -bool signbit(arithmetic x); - -int fpclassify(arithmetic x); - -bool isfinite(arithmetic x); -bool isinf(arithmetic x); -bool isnan(arithmetic x); -bool isnormal(arithmetic x); - -bool isgreater(arithmetic x, arithmetic y); -bool isgreaterequal(arithmetic x, arithmetic y); -bool isless(arithmetic x, arithmetic y); -bool islessequal(arithmetic x, arithmetic y); -bool islessgreater(arithmetic x, arithmetic y); -bool isunordered(arithmetic x, arithmetic y); - -floating_point acosh (arithmetic x); -float acoshf(float x); -long double acoshl(long double x); - -floating_point asinh (arithmetic x); -float asinhf(float x); -long double asinhl(long double x); - -floating_point atanh (arithmetic x); -float atanhf(float x); -long double atanhl(long double x); - -floating_point cbrt (arithmetic x); -float cbrtf(float x); -long double cbrtl(long double x); - -floating_point copysign (arithmetic x, arithmetic y); -float copysignf(float x, float y); -long double copysignl(long double x, long double y); - -floating_point erf (arithmetic x); -float erff(float x); -long double erfl(long double x); - -floating_point erfc (arithmetic x); -float erfcf(float x); -long double erfcl(long double x); - -floating_point exp2 (arithmetic x); -float exp2f(float x); -long double exp2l(long double x); - -floating_point expm1 (arithmetic x); -float expm1f(float x); -long double expm1l(long double x); - -floating_point fdim (arithmetic x, arithmetic y); -float fdimf(float x, float y); -long double fdiml(long double x, long double y); - -floating_point fma (arithmetic x, arithmetic y, arithmetic z); -float fmaf(float x, float y, float z); -long double fmal(long double x, long double y, long double z); - -floating_point fmax (arithmetic x, arithmetic y); -float fmaxf(float x, float y); -long double fmaxl(long double x, long double y); - -floating_point fmin (arithmetic x, arithmetic y); -float fminf(float x, float y); -long double fminl(long double x, long double y); - -floating_point hypot (arithmetic x, arithmetic y); -float hypotf(float x, float y); -long double hypotl(long double x, long double y); - -int ilogb (arithmetic x); -int ilogbf(float x); -int ilogbl(long double x); - -floating_point lgamma (arithmetic x); -float lgammaf(float x); -long double lgammal(long double x); - -long long llrint (arithmetic x); -long long llrintf(float x); -long long llrintl(long double x); - -long long llround (arithmetic x); -long long llroundf(float x); -long long llroundl(long double x); - -floating_point log1p (arithmetic x); -float log1pf(float x); -long double log1pl(long double x); - -floating_point log2 (arithmetic x); -float log2f(float x); -long double log2l(long double x); - -floating_point logb (arithmetic x); -float logbf(float x); -long double logbl(long double x); - -long lrint (arithmetic x); -long lrintf(float x); -long lrintl(long double x); - -long lround (arithmetic x); -long lroundf(float x); -long lroundl(long double x); - -double nan (const char* str); -float nanf(const char* str); -long double nanl(const char* str); - -floating_point nearbyint (arithmetic x); -float nearbyintf(float x); -long double nearbyintl(long double x); - -floating_point nextafter (arithmetic x, arithmetic y); -float nextafterf(float x, float y); -long double nextafterl(long double x, long double y); - -floating_point nexttoward (arithmetic x, long double y); -float nexttowardf(float x, long double y); -long double nexttowardl(long double x, long double y); - -floating_point remainder (arithmetic x, arithmetic y); -float remainderf(float x, float y); -long double remainderl(long double x, long double y); - -floating_point remquo (arithmetic x, arithmetic y, int* pquo); -float remquof(float x, float y, int* pquo); -long double remquol(long double x, long double y, int* pquo); - -floating_point rint (arithmetic x); -float rintf(float x); -long double rintl(long double x); - -floating_point round (arithmetic x); -float roundf(float x); -long double roundl(long double x); - -floating_point scalbln (arithmetic x, long ex); -float scalblnf(float x, long ex); -long double scalblnl(long double x, long ex); - -floating_point scalbn (arithmetic x, int ex); -float scalbnf(float x, int ex); -long double scalbnl(long double x, int ex); - -floating_point tgamma (arithmetic x); -float tgammaf(float x); -long double tgammal(long double x); - -floating_point trunc (arithmetic x); -float truncf(float x); -long double truncl(long double x); - -*/ - -#include <__config> - -#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) -#pragma GCC system_header -#endif - -#include_next - -#ifdef __cplusplus - -// We support including .h headers inside 'extern "C"' contexts, so switch -// back to C++ linkage before including these C++ headers. -extern "C++" { - -#include -#include - -// signbit - -#ifdef signbit - -template -_LIBCPP_INLINE_VISIBILITY -bool -__libcpp_signbit(_A1 __lcpp_x) _NOEXCEPT -{ - return signbit(__lcpp_x); -} - -#undef signbit - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, bool>::type -signbit(_A1 __lcpp_x) _NOEXCEPT -{ - return __libcpp_signbit((typename std::__promote<_A1>::type)__lcpp_x); -} - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if< - std::is_integral<_A1>::value && std::is_signed<_A1>::value, bool>::type -signbit(_A1 __lcpp_x) _NOEXCEPT -{ return __lcpp_x < 0; } - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if< - std::is_integral<_A1>::value && !std::is_signed<_A1>::value, bool>::type -signbit(_A1) _NOEXCEPT -{ return false; } - -#elif defined(_LIBCPP_MSVCRT) - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, bool>::type -signbit(_A1 __lcpp_x) _NOEXCEPT -{ - return ::signbit(static_cast::type>(__lcpp_x)); -} - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if< - std::is_integral<_A1>::value && std::is_signed<_A1>::value, bool>::type -signbit(_A1 __lcpp_x) _NOEXCEPT -{ return __lcpp_x < 0; } - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if< - std::is_integral<_A1>::value && !std::is_signed<_A1>::value, bool>::type -signbit(_A1) _NOEXCEPT -{ return false; } - -#endif // signbit - -// fpclassify - -#ifdef fpclassify - -template -_LIBCPP_INLINE_VISIBILITY -int -__libcpp_fpclassify(_A1 __lcpp_x) _NOEXCEPT -{ - return fpclassify(__lcpp_x); -} - -#undef fpclassify - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, int>::type -fpclassify(_A1 __lcpp_x) _NOEXCEPT -{ - return __libcpp_fpclassify((typename std::__promote<_A1>::type)__lcpp_x); -} - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, int>::type -fpclassify(_A1 __lcpp_x) _NOEXCEPT -{ return __lcpp_x == 0 ? FP_ZERO : FP_NORMAL; } - -#elif defined(_LIBCPP_MSVCRT) - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, bool>::type -fpclassify(_A1 __lcpp_x) _NOEXCEPT -{ - return ::fpclassify(static_cast::type>(__lcpp_x)); -} - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, int>::type -fpclassify(_A1 __lcpp_x) _NOEXCEPT -{ return __lcpp_x == 0 ? FP_ZERO : FP_NORMAL; } - -#endif // fpclassify - -// isfinite - -#ifdef isfinite - -template -_LIBCPP_INLINE_VISIBILITY -bool -__libcpp_isfinite(_A1 __lcpp_x) _NOEXCEPT -{ - return isfinite(__lcpp_x); -} - -#undef isfinite - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if< - std::is_arithmetic<_A1>::value && std::numeric_limits<_A1>::has_infinity, - bool>::type -isfinite(_A1 __lcpp_x) _NOEXCEPT -{ - return __libcpp_isfinite((typename std::__promote<_A1>::type)__lcpp_x); -} - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if< - std::is_arithmetic<_A1>::value && !std::numeric_limits<_A1>::has_infinity, - bool>::type -isfinite(_A1) _NOEXCEPT -{ return true; } - -#endif // isfinite - -// isinf - -#ifdef isinf - -template -_LIBCPP_INLINE_VISIBILITY -bool -__libcpp_isinf(_A1 __lcpp_x) _NOEXCEPT -{ - return isinf(__lcpp_x); -} - -#undef isinf - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if< - std::is_arithmetic<_A1>::value && std::numeric_limits<_A1>::has_infinity, - bool>::type -isinf(_A1 __lcpp_x) _NOEXCEPT -{ - return __libcpp_isinf((typename std::__promote<_A1>::type)__lcpp_x); -} - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if< - std::is_arithmetic<_A1>::value && !std::numeric_limits<_A1>::has_infinity, - bool>::type -isinf(_A1) _NOEXCEPT -{ return false; } - -#ifdef _LIBCPP_PREFERRED_OVERLOAD -inline _LIBCPP_INLINE_VISIBILITY -bool -isinf(float __lcpp_x) _NOEXCEPT { return __libcpp_isinf(__lcpp_x); } - -inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD -bool -isinf(double __lcpp_x) _NOEXCEPT { return __libcpp_isinf(__lcpp_x); } - -inline _LIBCPP_INLINE_VISIBILITY -bool -isinf(long double __lcpp_x) _NOEXCEPT { return __libcpp_isinf(__lcpp_x); } -#endif - -#endif // isinf - -// isnan - -#ifdef isnan - -template -_LIBCPP_INLINE_VISIBILITY -bool -__libcpp_isnan(_A1 __lcpp_x) _NOEXCEPT -{ - return isnan(__lcpp_x); -} - -#undef isnan - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, bool>::type -isnan(_A1 __lcpp_x) _NOEXCEPT -{ - return __libcpp_isnan((typename std::__promote<_A1>::type)__lcpp_x); -} - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, bool>::type -isnan(_A1) _NOEXCEPT -{ return false; } - -#ifdef _LIBCPP_PREFERRED_OVERLOAD -inline _LIBCPP_INLINE_VISIBILITY -bool -isnan(float __lcpp_x) _NOEXCEPT { return __libcpp_isnan(__lcpp_x); } - -inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD -bool -isnan(double __lcpp_x) _NOEXCEPT { return __libcpp_isnan(__lcpp_x); } - -inline _LIBCPP_INLINE_VISIBILITY -bool -isnan(long double __lcpp_x) _NOEXCEPT { return __libcpp_isnan(__lcpp_x); } -#endif - -#endif // isnan - -// isnormal - -#ifdef isnormal - -template -_LIBCPP_INLINE_VISIBILITY -bool -__libcpp_isnormal(_A1 __lcpp_x) _NOEXCEPT -{ - return isnormal(__lcpp_x); -} - -#undef isnormal - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, bool>::type -isnormal(_A1 __lcpp_x) _NOEXCEPT -{ - return __libcpp_isnormal((typename std::__promote<_A1>::type)__lcpp_x); -} - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, bool>::type -isnormal(_A1 __lcpp_x) _NOEXCEPT -{ return __lcpp_x != 0; } - -#endif // isnormal - -// isgreater - -#ifdef isgreater - -template -_LIBCPP_INLINE_VISIBILITY -bool -__libcpp_isgreater(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT -{ - return isgreater(__lcpp_x, __lcpp_y); -} - -#undef isgreater - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if -< - std::is_arithmetic<_A1>::value && - std::is_arithmetic<_A2>::value, - bool ->::type -isgreater(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT -{ - typedef typename std::__promote<_A1, _A2>::type type; - return __libcpp_isgreater((type)__lcpp_x, (type)__lcpp_y); -} - -#endif // isgreater - -// isgreaterequal - -#ifdef isgreaterequal - -template -_LIBCPP_INLINE_VISIBILITY -bool -__libcpp_isgreaterequal(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT -{ - return isgreaterequal(__lcpp_x, __lcpp_y); -} - -#undef isgreaterequal - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if -< - std::is_arithmetic<_A1>::value && - std::is_arithmetic<_A2>::value, - bool ->::type -isgreaterequal(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT -{ - typedef typename std::__promote<_A1, _A2>::type type; - return __libcpp_isgreaterequal((type)__lcpp_x, (type)__lcpp_y); -} - -#endif // isgreaterequal - -// isless - -#ifdef isless - -template -_LIBCPP_INLINE_VISIBILITY -bool -__libcpp_isless(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT -{ - return isless(__lcpp_x, __lcpp_y); -} - -#undef isless - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if -< - std::is_arithmetic<_A1>::value && - std::is_arithmetic<_A2>::value, - bool ->::type -isless(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT -{ - typedef typename std::__promote<_A1, _A2>::type type; - return __libcpp_isless((type)__lcpp_x, (type)__lcpp_y); -} - -#endif // isless - -// islessequal - -#ifdef islessequal - -template -_LIBCPP_INLINE_VISIBILITY -bool -__libcpp_islessequal(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT -{ - return islessequal(__lcpp_x, __lcpp_y); -} - -#undef islessequal - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if -< - std::is_arithmetic<_A1>::value && - std::is_arithmetic<_A2>::value, - bool ->::type -islessequal(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT -{ - typedef typename std::__promote<_A1, _A2>::type type; - return __libcpp_islessequal((type)__lcpp_x, (type)__lcpp_y); -} - -#endif // islessequal - -// islessgreater - -#ifdef islessgreater - -template -_LIBCPP_INLINE_VISIBILITY -bool -__libcpp_islessgreater(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT -{ - return islessgreater(__lcpp_x, __lcpp_y); -} - -#undef islessgreater - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if -< - std::is_arithmetic<_A1>::value && - std::is_arithmetic<_A2>::value, - bool ->::type -islessgreater(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT -{ - typedef typename std::__promote<_A1, _A2>::type type; - return __libcpp_islessgreater((type)__lcpp_x, (type)__lcpp_y); -} - -#endif // islessgreater - -// isunordered - -#ifdef isunordered - -template -_LIBCPP_INLINE_VISIBILITY -bool -__libcpp_isunordered(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT -{ - return isunordered(__lcpp_x, __lcpp_y); -} - -#undef isunordered - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if -< - std::is_arithmetic<_A1>::value && - std::is_arithmetic<_A2>::value, - bool ->::type -isunordered(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT -{ - typedef typename std::__promote<_A1, _A2>::type type; - return __libcpp_isunordered((type)__lcpp_x, (type)__lcpp_y); -} - -#endif // isunordered - -// abs - -#if !(defined(_AIX) || defined(__sun__)) -inline _LIBCPP_INLINE_VISIBILITY -float -abs(float __lcpp_x) _NOEXCEPT {return ::fabsf(__lcpp_x);} - -inline _LIBCPP_INLINE_VISIBILITY -double -abs(double __lcpp_x) _NOEXCEPT {return ::fabs(__lcpp_x);} - -inline _LIBCPP_INLINE_VISIBILITY -long double -abs(long double __lcpp_x) _NOEXCEPT {return ::fabsl(__lcpp_x);} -#endif // !(defined(_AIX) || defined(__sun__)) - -// acos - -#if !(defined(_AIX) || defined(__sun__)) -inline _LIBCPP_INLINE_VISIBILITY float acos(float __lcpp_x) _NOEXCEPT {return ::acosf(__lcpp_x);} -inline _LIBCPP_INLINE_VISIBILITY long double acos(long double __lcpp_x) _NOEXCEPT {return ::acosl(__lcpp_x);} -#endif - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, double>::type -acos(_A1 __lcpp_x) _NOEXCEPT {return ::acos((double)__lcpp_x);} - -// asin - -#if !(defined(_AIX) || defined(__sun__)) -inline _LIBCPP_INLINE_VISIBILITY float asin(float __lcpp_x) _NOEXCEPT {return ::asinf(__lcpp_x);} -inline _LIBCPP_INLINE_VISIBILITY long double asin(long double __lcpp_x) _NOEXCEPT {return ::asinl(__lcpp_x);} -#endif - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, double>::type -asin(_A1 __lcpp_x) _NOEXCEPT {return ::asin((double)__lcpp_x);} - -// atan - -#if !(defined(_AIX) || defined(__sun__)) -inline _LIBCPP_INLINE_VISIBILITY float atan(float __lcpp_x) _NOEXCEPT {return ::atanf(__lcpp_x);} -inline _LIBCPP_INLINE_VISIBILITY long double atan(long double __lcpp_x) _NOEXCEPT {return ::atanl(__lcpp_x);} -#endif - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, double>::type -atan(_A1 __lcpp_x) _NOEXCEPT {return ::atan((double)__lcpp_x);} - -// atan2 - -#if !(defined(_AIX) || defined(__sun__)) -inline _LIBCPP_INLINE_VISIBILITY float atan2(float __lcpp_y, float __lcpp_x) _NOEXCEPT {return ::atan2f(__lcpp_y, __lcpp_x);} -inline _LIBCPP_INLINE_VISIBILITY long double atan2(long double __lcpp_y, long double __lcpp_x) _NOEXCEPT {return ::atan2l(__lcpp_y, __lcpp_x);} -#endif - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::__lazy_enable_if -< - std::is_arithmetic<_A1>::value && - std::is_arithmetic<_A2>::value, - std::__promote<_A1, _A2> ->::type -atan2(_A1 __lcpp_y, _A2 __lcpp_x) _NOEXCEPT -{ - typedef typename std::__promote<_A1, _A2>::type __result_type; - static_assert((!(std::is_same<_A1, __result_type>::value && - std::is_same<_A2, __result_type>::value)), ""); - return ::atan2((__result_type)__lcpp_y, (__result_type)__lcpp_x); -} - -// ceil - -#if !(defined(_AIX) || defined(__sun__)) -inline _LIBCPP_INLINE_VISIBILITY float ceil(float __lcpp_x) _NOEXCEPT {return ::ceilf(__lcpp_x);} -inline _LIBCPP_INLINE_VISIBILITY long double ceil(long double __lcpp_x) _NOEXCEPT {return ::ceill(__lcpp_x);} -#endif - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, double>::type -ceil(_A1 __lcpp_x) _NOEXCEPT {return ::ceil((double)__lcpp_x);} - -// cos - -#if !(defined(_AIX) || defined(__sun__)) -inline _LIBCPP_INLINE_VISIBILITY float cos(float __lcpp_x) _NOEXCEPT {return ::cosf(__lcpp_x);} -inline _LIBCPP_INLINE_VISIBILITY long double cos(long double __lcpp_x) _NOEXCEPT {return ::cosl(__lcpp_x);} -#endif - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, double>::type -cos(_A1 __lcpp_x) _NOEXCEPT {return ::cos((double)__lcpp_x);} - -// cosh - -#if !(defined(_AIX) || defined(__sun__)) -inline _LIBCPP_INLINE_VISIBILITY float cosh(float __lcpp_x) _NOEXCEPT {return ::coshf(__lcpp_x);} -inline _LIBCPP_INLINE_VISIBILITY long double cosh(long double __lcpp_x) _NOEXCEPT {return ::coshl(__lcpp_x);} -#endif - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, double>::type -cosh(_A1 __lcpp_x) _NOEXCEPT {return ::cosh((double)__lcpp_x);} - -// exp - -#if !(defined(_AIX) || defined(__sun__)) -inline _LIBCPP_INLINE_VISIBILITY float exp(float __lcpp_x) _NOEXCEPT {return ::expf(__lcpp_x);} -inline _LIBCPP_INLINE_VISIBILITY long double exp(long double __lcpp_x) _NOEXCEPT {return ::expl(__lcpp_x);} -#endif - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, double>::type -exp(_A1 __lcpp_x) _NOEXCEPT {return ::exp((double)__lcpp_x);} - -// fabs - -#if !(defined(_AIX) || defined(__sun__)) -inline _LIBCPP_INLINE_VISIBILITY float fabs(float __lcpp_x) _NOEXCEPT {return ::fabsf(__lcpp_x);} -inline _LIBCPP_INLINE_VISIBILITY long double fabs(long double __lcpp_x) _NOEXCEPT {return ::fabsl(__lcpp_x);} -#endif - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, double>::type -fabs(_A1 __lcpp_x) _NOEXCEPT {return ::fabs((double)__lcpp_x);} - -// floor - -#if !(defined(_AIX) || defined(__sun__)) -inline _LIBCPP_INLINE_VISIBILITY float floor(float __lcpp_x) _NOEXCEPT {return ::floorf(__lcpp_x);} -inline _LIBCPP_INLINE_VISIBILITY long double floor(long double __lcpp_x) _NOEXCEPT {return ::floorl(__lcpp_x);} -#endif - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, double>::type -floor(_A1 __lcpp_x) _NOEXCEPT {return ::floor((double)__lcpp_x);} - -// fmod - -#if !(defined(_AIX) || defined(__sun__)) -inline _LIBCPP_INLINE_VISIBILITY float fmod(float __lcpp_x, float __lcpp_y) _NOEXCEPT {return ::fmodf(__lcpp_x, __lcpp_y);} -inline _LIBCPP_INLINE_VISIBILITY long double fmod(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return ::fmodl(__lcpp_x, __lcpp_y);} -#endif - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::__lazy_enable_if -< - std::is_arithmetic<_A1>::value && - std::is_arithmetic<_A2>::value, - std::__promote<_A1, _A2> ->::type -fmod(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT -{ - typedef typename std::__promote<_A1, _A2>::type __result_type; - static_assert((!(std::is_same<_A1, __result_type>::value && - std::is_same<_A2, __result_type>::value)), ""); - return ::fmod((__result_type)__lcpp_x, (__result_type)__lcpp_y); -} - -// frexp - -#if !(defined(_AIX) || defined(__sun__)) -inline _LIBCPP_INLINE_VISIBILITY float frexp(float __lcpp_x, int* __lcpp_e) _NOEXCEPT {return ::frexpf(__lcpp_x, __lcpp_e);} -inline _LIBCPP_INLINE_VISIBILITY long double frexp(long double __lcpp_x, int* __lcpp_e) _NOEXCEPT {return ::frexpl(__lcpp_x, __lcpp_e);} -#endif - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, double>::type -frexp(_A1 __lcpp_x, int* __lcpp_e) _NOEXCEPT {return ::frexp((double)__lcpp_x, __lcpp_e);} - -// ldexp - -#if !(defined(_AIX) || defined(__sun__)) -inline _LIBCPP_INLINE_VISIBILITY float ldexp(float __lcpp_x, int __lcpp_e) _NOEXCEPT {return ::ldexpf(__lcpp_x, __lcpp_e);} -inline _LIBCPP_INLINE_VISIBILITY long double ldexp(long double __lcpp_x, int __lcpp_e) _NOEXCEPT {return ::ldexpl(__lcpp_x, __lcpp_e);} -#endif - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, double>::type -ldexp(_A1 __lcpp_x, int __lcpp_e) _NOEXCEPT {return ::ldexp((double)__lcpp_x, __lcpp_e);} - -// log - -#if !(defined(_AIX) || defined(__sun__)) -inline _LIBCPP_INLINE_VISIBILITY float log(float __lcpp_x) _NOEXCEPT {return ::logf(__lcpp_x);} -inline _LIBCPP_INLINE_VISIBILITY long double log(long double __lcpp_x) _NOEXCEPT {return ::logl(__lcpp_x);} -#endif - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, double>::type -log(_A1 __lcpp_x) _NOEXCEPT {return ::log((double)__lcpp_x);} - -// log10 - -#if !(defined(_AIX) || defined(__sun__)) -inline _LIBCPP_INLINE_VISIBILITY float log10(float __lcpp_x) _NOEXCEPT {return ::log10f(__lcpp_x);} -inline _LIBCPP_INLINE_VISIBILITY long double log10(long double __lcpp_x) _NOEXCEPT {return ::log10l(__lcpp_x);} -#endif - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, double>::type -log10(_A1 __lcpp_x) _NOEXCEPT {return ::log10((double)__lcpp_x);} - -// modf - -#if !(defined(_AIX) || defined(__sun__)) -inline _LIBCPP_INLINE_VISIBILITY float modf(float __lcpp_x, float* __lcpp_y) _NOEXCEPT {return ::modff(__lcpp_x, __lcpp_y);} -inline _LIBCPP_INLINE_VISIBILITY long double modf(long double __lcpp_x, long double* __lcpp_y) _NOEXCEPT {return ::modfl(__lcpp_x, __lcpp_y);} -#endif - -// pow - -#if !(defined(_AIX) || defined(__sun__)) -inline _LIBCPP_INLINE_VISIBILITY float pow(float __lcpp_x, float __lcpp_y) _NOEXCEPT {return ::powf(__lcpp_x, __lcpp_y);} -inline _LIBCPP_INLINE_VISIBILITY long double pow(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return ::powl(__lcpp_x, __lcpp_y);} -#endif - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::__lazy_enable_if -< - std::is_arithmetic<_A1>::value && - std::is_arithmetic<_A2>::value, - std::__promote<_A1, _A2> ->::type -pow(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT -{ - typedef typename std::__promote<_A1, _A2>::type __result_type; - static_assert((!(std::is_same<_A1, __result_type>::value && - std::is_same<_A2, __result_type>::value)), ""); - return ::pow((__result_type)__lcpp_x, (__result_type)__lcpp_y); -} - -// sin - -#if !(defined(_AIX) || defined(__sun__)) -inline _LIBCPP_INLINE_VISIBILITY float sin(float __lcpp_x) _NOEXCEPT {return ::sinf(__lcpp_x);} -inline _LIBCPP_INLINE_VISIBILITY long double sin(long double __lcpp_x) _NOEXCEPT {return ::sinl(__lcpp_x);} -#endif - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, double>::type -sin(_A1 __lcpp_x) _NOEXCEPT {return ::sin((double)__lcpp_x);} - -// sinh - -#if !(defined(_AIX) || defined(__sun__)) -inline _LIBCPP_INLINE_VISIBILITY float sinh(float __lcpp_x) _NOEXCEPT {return ::sinhf(__lcpp_x);} -inline _LIBCPP_INLINE_VISIBILITY long double sinh(long double __lcpp_x) _NOEXCEPT {return ::sinhl(__lcpp_x);} -#endif - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, double>::type -sinh(_A1 __lcpp_x) _NOEXCEPT {return ::sinh((double)__lcpp_x);} - -// sqrt - -#if !(defined(_AIX) || defined(__sun__)) -inline _LIBCPP_INLINE_VISIBILITY float sqrt(float __lcpp_x) _NOEXCEPT {return ::sqrtf(__lcpp_x);} -inline _LIBCPP_INLINE_VISIBILITY long double sqrt(long double __lcpp_x) _NOEXCEPT {return ::sqrtl(__lcpp_x);} -#endif - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, double>::type -sqrt(_A1 __lcpp_x) _NOEXCEPT {return ::sqrt((double)__lcpp_x);} - -// tan - -#if !(defined(_AIX) || defined(__sun__)) -inline _LIBCPP_INLINE_VISIBILITY float tan(float __lcpp_x) _NOEXCEPT {return ::tanf(__lcpp_x);} -inline _LIBCPP_INLINE_VISIBILITY long double tan(long double __lcpp_x) _NOEXCEPT {return ::tanl(__lcpp_x);} -#endif - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, double>::type -tan(_A1 __lcpp_x) _NOEXCEPT {return ::tan((double)__lcpp_x);} - -// tanh - -#if !(defined(_AIX) || defined(__sun__)) -inline _LIBCPP_INLINE_VISIBILITY float tanh(float __lcpp_x) _NOEXCEPT {return ::tanhf(__lcpp_x);} -inline _LIBCPP_INLINE_VISIBILITY long double tanh(long double __lcpp_x) _NOEXCEPT {return ::tanhl(__lcpp_x);} -#endif - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, double>::type -tanh(_A1 __lcpp_x) _NOEXCEPT {return ::tanh((double)__lcpp_x);} - -// acosh - -inline _LIBCPP_INLINE_VISIBILITY float acosh(float __lcpp_x) _NOEXCEPT {return ::acoshf(__lcpp_x);} -inline _LIBCPP_INLINE_VISIBILITY long double acosh(long double __lcpp_x) _NOEXCEPT {return ::acoshl(__lcpp_x);} - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, double>::type -acosh(_A1 __lcpp_x) _NOEXCEPT {return ::acosh((double)__lcpp_x);} - -// asinh - -inline _LIBCPP_INLINE_VISIBILITY float asinh(float __lcpp_x) _NOEXCEPT {return ::asinhf(__lcpp_x);} -inline _LIBCPP_INLINE_VISIBILITY long double asinh(long double __lcpp_x) _NOEXCEPT {return ::asinhl(__lcpp_x);} - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, double>::type -asinh(_A1 __lcpp_x) _NOEXCEPT {return ::asinh((double)__lcpp_x);} - -// atanh - -inline _LIBCPP_INLINE_VISIBILITY float atanh(float __lcpp_x) _NOEXCEPT {return ::atanhf(__lcpp_x);} -inline _LIBCPP_INLINE_VISIBILITY long double atanh(long double __lcpp_x) _NOEXCEPT {return ::atanhl(__lcpp_x);} - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, double>::type -atanh(_A1 __lcpp_x) _NOEXCEPT {return ::atanh((double)__lcpp_x);} - -// cbrt - -inline _LIBCPP_INLINE_VISIBILITY float cbrt(float __lcpp_x) _NOEXCEPT {return ::cbrtf(__lcpp_x);} -inline _LIBCPP_INLINE_VISIBILITY long double cbrt(long double __lcpp_x) _NOEXCEPT {return ::cbrtl(__lcpp_x);} - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, double>::type -cbrt(_A1 __lcpp_x) _NOEXCEPT {return ::cbrt((double)__lcpp_x);} - -// copysign - -inline _LIBCPP_INLINE_VISIBILITY float copysign(float __lcpp_x, - float __lcpp_y) _NOEXCEPT { - return ::copysignf(__lcpp_x, __lcpp_y); -} -inline _LIBCPP_INLINE_VISIBILITY long double -copysign(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT { - return ::copysignl(__lcpp_x, __lcpp_y); -} - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::__lazy_enable_if -< - std::is_arithmetic<_A1>::value && - std::is_arithmetic<_A2>::value, - std::__promote<_A1, _A2> ->::type -copysign(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT -{ - typedef typename std::__promote<_A1, _A2>::type __result_type; - static_assert((!(std::is_same<_A1, __result_type>::value && - std::is_same<_A2, __result_type>::value)), ""); - return ::copysign((__result_type)__lcpp_x, (__result_type)__lcpp_y); -} - -// erf - -inline _LIBCPP_INLINE_VISIBILITY float erf(float __lcpp_x) _NOEXCEPT {return ::erff(__lcpp_x);} -inline _LIBCPP_INLINE_VISIBILITY long double erf(long double __lcpp_x) _NOEXCEPT {return ::erfl(__lcpp_x);} - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, double>::type -erf(_A1 __lcpp_x) _NOEXCEPT {return ::erf((double)__lcpp_x);} - -// erfc - -inline _LIBCPP_INLINE_VISIBILITY float erfc(float __lcpp_x) _NOEXCEPT {return ::erfcf(__lcpp_x);} -inline _LIBCPP_INLINE_VISIBILITY long double erfc(long double __lcpp_x) _NOEXCEPT {return ::erfcl(__lcpp_x);} - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, double>::type -erfc(_A1 __lcpp_x) _NOEXCEPT {return ::erfc((double)__lcpp_x);} - -// exp2 - -inline _LIBCPP_INLINE_VISIBILITY float exp2(float __lcpp_x) _NOEXCEPT {return ::exp2f(__lcpp_x);} -inline _LIBCPP_INLINE_VISIBILITY long double exp2(long double __lcpp_x) _NOEXCEPT {return ::exp2l(__lcpp_x);} - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, double>::type -exp2(_A1 __lcpp_x) _NOEXCEPT {return ::exp2((double)__lcpp_x);} - -// expm1 - -inline _LIBCPP_INLINE_VISIBILITY float expm1(float __lcpp_x) _NOEXCEPT {return ::expm1f(__lcpp_x);} -inline _LIBCPP_INLINE_VISIBILITY long double expm1(long double __lcpp_x) _NOEXCEPT {return ::expm1l(__lcpp_x);} - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, double>::type -expm1(_A1 __lcpp_x) _NOEXCEPT {return ::expm1((double)__lcpp_x);} - -// fdim - -inline _LIBCPP_INLINE_VISIBILITY float fdim(float __lcpp_x, float __lcpp_y) _NOEXCEPT {return ::fdimf(__lcpp_x, __lcpp_y);} -inline _LIBCPP_INLINE_VISIBILITY long double fdim(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return ::fdiml(__lcpp_x, __lcpp_y);} - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::__lazy_enable_if -< - std::is_arithmetic<_A1>::value && - std::is_arithmetic<_A2>::value, - std::__promote<_A1, _A2> ->::type -fdim(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT -{ - typedef typename std::__promote<_A1, _A2>::type __result_type; - static_assert((!(std::is_same<_A1, __result_type>::value && - std::is_same<_A2, __result_type>::value)), ""); - return ::fdim((__result_type)__lcpp_x, (__result_type)__lcpp_y); -} - -// fma - -inline _LIBCPP_INLINE_VISIBILITY float fma(float __lcpp_x, float __lcpp_y, float __lcpp_z) _NOEXCEPT {return ::fmaf(__lcpp_x, __lcpp_y, __lcpp_z);} -inline _LIBCPP_INLINE_VISIBILITY long double fma(long double __lcpp_x, long double __lcpp_y, long double __lcpp_z) _NOEXCEPT {return ::fmal(__lcpp_x, __lcpp_y, __lcpp_z);} - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::__lazy_enable_if -< - std::is_arithmetic<_A1>::value && - std::is_arithmetic<_A2>::value && - std::is_arithmetic<_A3>::value, - std::__promote<_A1, _A2, _A3> ->::type -fma(_A1 __lcpp_x, _A2 __lcpp_y, _A3 __lcpp_z) _NOEXCEPT -{ - typedef typename std::__promote<_A1, _A2, _A3>::type __result_type; - static_assert((!(std::is_same<_A1, __result_type>::value && - std::is_same<_A2, __result_type>::value && - std::is_same<_A3, __result_type>::value)), ""); - return ::fma((__result_type)__lcpp_x, (__result_type)__lcpp_y, (__result_type)__lcpp_z); -} - -// fmax - -inline _LIBCPP_INLINE_VISIBILITY float fmax(float __lcpp_x, float __lcpp_y) _NOEXCEPT {return ::fmaxf(__lcpp_x, __lcpp_y);} -inline _LIBCPP_INLINE_VISIBILITY long double fmax(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return ::fmaxl(__lcpp_x, __lcpp_y);} - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::__lazy_enable_if -< - std::is_arithmetic<_A1>::value && - std::is_arithmetic<_A2>::value, - std::__promote<_A1, _A2> ->::type -fmax(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT -{ - typedef typename std::__promote<_A1, _A2>::type __result_type; - static_assert((!(std::is_same<_A1, __result_type>::value && - std::is_same<_A2, __result_type>::value)), ""); - return ::fmax((__result_type)__lcpp_x, (__result_type)__lcpp_y); -} - -// fmin - -inline _LIBCPP_INLINE_VISIBILITY float fmin(float __lcpp_x, float __lcpp_y) _NOEXCEPT {return ::fminf(__lcpp_x, __lcpp_y);} -inline _LIBCPP_INLINE_VISIBILITY long double fmin(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return ::fminl(__lcpp_x, __lcpp_y);} - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::__lazy_enable_if -< - std::is_arithmetic<_A1>::value && - std::is_arithmetic<_A2>::value, - std::__promote<_A1, _A2> ->::type -fmin(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT -{ - typedef typename std::__promote<_A1, _A2>::type __result_type; - static_assert((!(std::is_same<_A1, __result_type>::value && - std::is_same<_A2, __result_type>::value)), ""); - return ::fmin((__result_type)__lcpp_x, (__result_type)__lcpp_y); -} - -// hypot - -inline _LIBCPP_INLINE_VISIBILITY float hypot(float __lcpp_x, float __lcpp_y) _NOEXCEPT {return ::hypotf(__lcpp_x, __lcpp_y);} -inline _LIBCPP_INLINE_VISIBILITY long double hypot(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return ::hypotl(__lcpp_x, __lcpp_y);} - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::__lazy_enable_if -< - std::is_arithmetic<_A1>::value && - std::is_arithmetic<_A2>::value, - std::__promote<_A1, _A2> ->::type -hypot(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT -{ - typedef typename std::__promote<_A1, _A2>::type __result_type; - static_assert((!(std::is_same<_A1, __result_type>::value && - std::is_same<_A2, __result_type>::value)), ""); - return ::hypot((__result_type)__lcpp_x, (__result_type)__lcpp_y); -} - -// ilogb - -inline _LIBCPP_INLINE_VISIBILITY int ilogb(float __lcpp_x) _NOEXCEPT {return ::ilogbf(__lcpp_x);} -inline _LIBCPP_INLINE_VISIBILITY int ilogb(long double __lcpp_x) _NOEXCEPT {return ::ilogbl(__lcpp_x);} - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, int>::type -ilogb(_A1 __lcpp_x) _NOEXCEPT {return ::ilogb((double)__lcpp_x);} - -// lgamma - -inline _LIBCPP_INLINE_VISIBILITY float lgamma(float __lcpp_x) _NOEXCEPT {return ::lgammaf(__lcpp_x);} -inline _LIBCPP_INLINE_VISIBILITY long double lgamma(long double __lcpp_x) _NOEXCEPT {return ::lgammal(__lcpp_x);} - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, double>::type -lgamma(_A1 __lcpp_x) _NOEXCEPT {return ::lgamma((double)__lcpp_x);} - -// llrint - -inline _LIBCPP_INLINE_VISIBILITY long long llrint(float __lcpp_x) _NOEXCEPT {return ::llrintf(__lcpp_x);} -inline _LIBCPP_INLINE_VISIBILITY long long llrint(long double __lcpp_x) _NOEXCEPT {return ::llrintl(__lcpp_x);} - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, long long>::type -llrint(_A1 __lcpp_x) _NOEXCEPT {return ::llrint((double)__lcpp_x);} - -// llround - -inline _LIBCPP_INLINE_VISIBILITY long long llround(float __lcpp_x) _NOEXCEPT {return ::llroundf(__lcpp_x);} -inline _LIBCPP_INLINE_VISIBILITY long long llround(long double __lcpp_x) _NOEXCEPT {return ::llroundl(__lcpp_x);} - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, long long>::type -llround(_A1 __lcpp_x) _NOEXCEPT {return ::llround((double)__lcpp_x);} - -// log1p - -inline _LIBCPP_INLINE_VISIBILITY float log1p(float __lcpp_x) _NOEXCEPT {return ::log1pf(__lcpp_x);} -inline _LIBCPP_INLINE_VISIBILITY long double log1p(long double __lcpp_x) _NOEXCEPT {return ::log1pl(__lcpp_x);} - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, double>::type -log1p(_A1 __lcpp_x) _NOEXCEPT {return ::log1p((double)__lcpp_x);} - -// log2 - -inline _LIBCPP_INLINE_VISIBILITY float log2(float __lcpp_x) _NOEXCEPT {return ::log2f(__lcpp_x);} -inline _LIBCPP_INLINE_VISIBILITY long double log2(long double __lcpp_x) _NOEXCEPT {return ::log2l(__lcpp_x);} - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, double>::type -log2(_A1 __lcpp_x) _NOEXCEPT {return ::log2((double)__lcpp_x);} - -// logb - -inline _LIBCPP_INLINE_VISIBILITY float logb(float __lcpp_x) _NOEXCEPT {return ::logbf(__lcpp_x);} -inline _LIBCPP_INLINE_VISIBILITY long double logb(long double __lcpp_x) _NOEXCEPT {return ::logbl(__lcpp_x);} - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, double>::type -logb(_A1 __lcpp_x) _NOEXCEPT {return ::logb((double)__lcpp_x);} - -// lrint - -inline _LIBCPP_INLINE_VISIBILITY long lrint(float __lcpp_x) _NOEXCEPT {return ::lrintf(__lcpp_x);} -inline _LIBCPP_INLINE_VISIBILITY long lrint(long double __lcpp_x) _NOEXCEPT {return ::lrintl(__lcpp_x);} - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, long>::type -lrint(_A1 __lcpp_x) _NOEXCEPT {return ::lrint((double)__lcpp_x);} - -// lround - -inline _LIBCPP_INLINE_VISIBILITY long lround(float __lcpp_x) _NOEXCEPT {return ::lroundf(__lcpp_x);} -inline _LIBCPP_INLINE_VISIBILITY long lround(long double __lcpp_x) _NOEXCEPT {return ::lroundl(__lcpp_x);} - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, long>::type -lround(_A1 __lcpp_x) _NOEXCEPT {return ::lround((double)__lcpp_x);} - -// nan - -// nearbyint - -inline _LIBCPP_INLINE_VISIBILITY float nearbyint(float __lcpp_x) _NOEXCEPT {return ::nearbyintf(__lcpp_x);} -inline _LIBCPP_INLINE_VISIBILITY long double nearbyint(long double __lcpp_x) _NOEXCEPT {return ::nearbyintl(__lcpp_x);} - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, double>::type -nearbyint(_A1 __lcpp_x) _NOEXCEPT {return ::nearbyint((double)__lcpp_x);} - -// nextafter - -inline _LIBCPP_INLINE_VISIBILITY float nextafter(float __lcpp_x, float __lcpp_y) _NOEXCEPT {return ::nextafterf(__lcpp_x, __lcpp_y);} -inline _LIBCPP_INLINE_VISIBILITY long double nextafter(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return ::nextafterl(__lcpp_x, __lcpp_y);} - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::__lazy_enable_if -< - std::is_arithmetic<_A1>::value && - std::is_arithmetic<_A2>::value, - std::__promote<_A1, _A2> ->::type -nextafter(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT -{ - typedef typename std::__promote<_A1, _A2>::type __result_type; - static_assert((!(std::is_same<_A1, __result_type>::value && - std::is_same<_A2, __result_type>::value)), ""); - return ::nextafter((__result_type)__lcpp_x, (__result_type)__lcpp_y); -} - -// nexttoward - -inline _LIBCPP_INLINE_VISIBILITY float nexttoward(float __lcpp_x, long double __lcpp_y) _NOEXCEPT {return ::nexttowardf(__lcpp_x, __lcpp_y);} -inline _LIBCPP_INLINE_VISIBILITY long double nexttoward(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return ::nexttowardl(__lcpp_x, __lcpp_y);} - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, double>::type -nexttoward(_A1 __lcpp_x, long double __lcpp_y) _NOEXCEPT {return ::nexttoward((double)__lcpp_x, __lcpp_y);} - -// remainder - -inline _LIBCPP_INLINE_VISIBILITY float remainder(float __lcpp_x, float __lcpp_y) _NOEXCEPT {return ::remainderf(__lcpp_x, __lcpp_y);} -inline _LIBCPP_INLINE_VISIBILITY long double remainder(long double __lcpp_x, long double __lcpp_y) _NOEXCEPT {return ::remainderl(__lcpp_x, __lcpp_y);} - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::__lazy_enable_if -< - std::is_arithmetic<_A1>::value && - std::is_arithmetic<_A2>::value, - std::__promote<_A1, _A2> ->::type -remainder(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT -{ - typedef typename std::__promote<_A1, _A2>::type __result_type; - static_assert((!(std::is_same<_A1, __result_type>::value && - std::is_same<_A2, __result_type>::value)), ""); - return ::remainder((__result_type)__lcpp_x, (__result_type)__lcpp_y); -} - -// remquo - -inline _LIBCPP_INLINE_VISIBILITY float remquo(float __lcpp_x, float __lcpp_y, int* __lcpp_z) _NOEXCEPT {return ::remquof(__lcpp_x, __lcpp_y, __lcpp_z);} -inline _LIBCPP_INLINE_VISIBILITY long double remquo(long double __lcpp_x, long double __lcpp_y, int* __lcpp_z) _NOEXCEPT {return ::remquol(__lcpp_x, __lcpp_y, __lcpp_z);} - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::__lazy_enable_if -< - std::is_arithmetic<_A1>::value && - std::is_arithmetic<_A2>::value, - std::__promote<_A1, _A2> ->::type -remquo(_A1 __lcpp_x, _A2 __lcpp_y, int* __lcpp_z) _NOEXCEPT -{ - typedef typename std::__promote<_A1, _A2>::type __result_type; - static_assert((!(std::is_same<_A1, __result_type>::value && - std::is_same<_A2, __result_type>::value)), ""); - return ::remquo((__result_type)__lcpp_x, (__result_type)__lcpp_y, __lcpp_z); -} - -// rint - -inline _LIBCPP_INLINE_VISIBILITY float rint(float __lcpp_x) _NOEXCEPT {return ::rintf(__lcpp_x);} -inline _LIBCPP_INLINE_VISIBILITY long double rint(long double __lcpp_x) _NOEXCEPT {return ::rintl(__lcpp_x);} - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, double>::type -rint(_A1 __lcpp_x) _NOEXCEPT {return ::rint((double)__lcpp_x);} - -// round - -inline _LIBCPP_INLINE_VISIBILITY float round(float __lcpp_x) _NOEXCEPT {return ::roundf(__lcpp_x);} -inline _LIBCPP_INLINE_VISIBILITY long double round(long double __lcpp_x) _NOEXCEPT {return ::roundl(__lcpp_x);} - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, double>::type -round(_A1 __lcpp_x) _NOEXCEPT {return ::round((double)__lcpp_x);} - -// scalbln - -inline _LIBCPP_INLINE_VISIBILITY float scalbln(float __lcpp_x, long __lcpp_y) _NOEXCEPT {return ::scalblnf(__lcpp_x, __lcpp_y);} -inline _LIBCPP_INLINE_VISIBILITY long double scalbln(long double __lcpp_x, long __lcpp_y) _NOEXCEPT {return ::scalblnl(__lcpp_x, __lcpp_y);} - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, double>::type -scalbln(_A1 __lcpp_x, long __lcpp_y) _NOEXCEPT {return ::scalbln((double)__lcpp_x, __lcpp_y);} - -// scalbn - -inline _LIBCPP_INLINE_VISIBILITY float scalbn(float __lcpp_x, int __lcpp_y) _NOEXCEPT {return ::scalbnf(__lcpp_x, __lcpp_y);} -inline _LIBCPP_INLINE_VISIBILITY long double scalbn(long double __lcpp_x, int __lcpp_y) _NOEXCEPT {return ::scalbnl(__lcpp_x, __lcpp_y);} - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, double>::type -scalbn(_A1 __lcpp_x, int __lcpp_y) _NOEXCEPT {return ::scalbn((double)__lcpp_x, __lcpp_y);} - -// tgamma - -inline _LIBCPP_INLINE_VISIBILITY float tgamma(float __lcpp_x) _NOEXCEPT {return ::tgammaf(__lcpp_x);} -inline _LIBCPP_INLINE_VISIBILITY long double tgamma(long double __lcpp_x) _NOEXCEPT {return ::tgammal(__lcpp_x);} - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, double>::type -tgamma(_A1 __lcpp_x) _NOEXCEPT {return ::tgamma((double)__lcpp_x);} - -// trunc - -inline _LIBCPP_INLINE_VISIBILITY float trunc(float __lcpp_x) _NOEXCEPT {return ::truncf(__lcpp_x);} -inline _LIBCPP_INLINE_VISIBILITY long double trunc(long double __lcpp_x) _NOEXCEPT {return ::truncl(__lcpp_x);} - -template -inline _LIBCPP_INLINE_VISIBILITY -typename std::enable_if::value, double>::type -trunc(_A1 __lcpp_x) _NOEXCEPT {return ::trunc((double)__lcpp_x);} - -} // extern "C++" - -#endif // __cplusplus - -#else // _LIBCPP_MATH_H - -// This include lives outside the header guard in order to support an MSVC -// extension which allows users to do: -// -// #define _USE_MATH_DEFINES -// #include -// -// and receive the definitions of mathematical constants, even if -// has previously been included. -#if defined(_LIBCPP_MSVCRT) && defined(_USE_MATH_DEFINES) -#include_next -#endif - -#endif // _LIBCPP_MATH_H diff --git a/patches/0001-Update-the-default-configuration.patch b/patches/0001-Update-the-default-configuration.patch deleted file mode 100644 index 8e0eb9d..0000000 --- a/patches/0001-Update-the-default-configuration.patch +++ /dev/null @@ -1,26 +0,0 @@ -From d8d1e8312a8cec9d163fb4713f3ec622b920e75d Mon Sep 17 00:00:00 2001 -From: Vlad-Andrei Badoiu -Date: Thu, 4 Apr 2019 19:06:08 +0300 -Subject: [PATCH 1/1] Update the default configuration - -Signed-off-by: Vlad-Andrei Badoiu ---- - include/__config | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/include/__config b/include/__config -index 738d891..9a5659b 100644 ---- a/include/__config -+++ b/include/__config -@@ -23,6 +23,8 @@ - - #ifdef __cplusplus - -+#include <__config_unikraft> -+ - #ifdef __GNUC__ - # define _GNUC_VER (__GNUC__ * 100 + __GNUC_MINOR__) - // The _GNUC_VER_NEW macro better represents the new GCC versioning scheme --- -2.20.1 - diff --git a/patches/0002-Change-from-long-double-function-to-double.patch b/patches/0002-Change-from-long-double-function-to-double.patch deleted file mode 100644 index 5420f04..0000000 --- a/patches/0002-Change-from-long-double-function-to-double.patch +++ /dev/null @@ -1,40 +0,0 @@ -From d8d29b3dc00ff53e4813533a4154ce7249c4d415 Mon Sep 17 00:00:00 2001 -From: Vlad-Andrei Badoiu -Date: Thu, 28 Mar 2019 18:57:17 +0200 -Subject: [PATCH 1/1] Change from long double function to double - -Signed-off-by: Vlad-Andrei Badoiu ---- - include/locale | 2 +- - src/string.cpp | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/include/locale b/include/locale -index e240799..f7a3f09 100644 ---- a/include/locale -+++ b/include/locale -@@ -817,7 +817,7 @@ double __do_strtod(const char* __a, char** __p2) { - template <> - inline _LIBCPP_INLINE_VISIBILITY - long double __do_strtod(const char* __a, char** __p2) { -- return strtold_l(__a, __p2, _LIBCPP_GET_C_LOCALE); -+ return strtod_l(__a, __p2, _LIBCPP_GET_C_LOCALE); - } - - template -diff --git a/src/string.cpp b/src/string.cpp -index d7ebdd3..9e7a85c 100644 ---- a/src/string.cpp -+++ b/src/string.cpp -@@ -217,7 +217,7 @@ inline - long double - as_float( const string& func, const string& s, size_t* idx ) - { -- return as_float_helper( func, s, idx, strtold ); -+ return as_float_helper( func, s, idx, strtod ); - } - - template<> --- -2.20.1 - diff --git a/patches/0004-Fix-arm-atomics-memory.patch b/patches/0004-Fix-arm-atomics-memory.patch deleted file mode 100644 index 852805e..0000000 --- a/patches/0004-Fix-arm-atomics-memory.patch +++ /dev/null @@ -1,28 +0,0 @@ ---- a/include/memory 2020-01-28 13:27:53.843204834 +0100 -+++ b/include/memory 2020-01-28 13:29:45.109925361 +0100 -@@ -675,6 +675,7 @@ - _LIBCPP_PUSH_MACROS - #include <__undef_macros> - -+#include - - _LIBCPP_BEGIN_NAMESPACE_STD - -@@ -3458,7 +3459,7 @@ - __libcpp_atomic_refcount_increment(_Tp& __t) _NOEXCEPT - { - #if defined(_LIBCPP_HAS_BUILTIN_ATOMIC_SUPPORT) && !defined(_LIBCPP_HAS_NO_THREADS) -- return __atomic_add_fetch(&__t, 1, __ATOMIC_RELAXED); -+ return ukarch_fetch_add(&__t, 1); - #else - return __t += 1; - #endif -@@ -3469,7 +3470,7 @@ - __libcpp_atomic_refcount_decrement(_Tp& __t) _NOEXCEPT - { - #if defined(_LIBCPP_HAS_BUILTIN_ATOMIC_SUPPORT) && !defined(_LIBCPP_HAS_NO_THREADS) -- return __atomic_add_fetch(&__t, -1, __ATOMIC_ACQ_REL); -+ return ukarch_dec(&__t); - #else - return __t -= 1; - #endif diff --git a/patches/0005-Fix-arm-atomics-header.patch b/patches/0005-Fix-arm-atomics-header.patch deleted file mode 100644 index 75e27d2..0000000 --- a/patches/0005-Fix-arm-atomics-header.patch +++ /dev/null @@ -1,19 +0,0 @@ ---- a/src/include/atomic_support.h 2020-01-28 13:33:44.139173682 +0100 -+++ b/src/include/atomic_support.h 2020-01-28 13:34:43.986484257 +0100 -@@ -12,6 +12,7 @@ - - #include "__config" - #include "memory" // for __libcpp_relaxed_load -+#include - - #if defined(__clang__) && __has_builtin(__atomic_load_n) \ - && __has_builtin(__atomic_store_n) \ -@@ -80,7 +81,7 @@ - _ValueType __libcpp_atomic_add(_ValueType* __val, _AddType __a, - int __order = _AO_Seq) - { -- return __atomic_add_fetch(__val, __a, __order); -+ return ukarch_fetch_add(__val, __a); - } - - template diff --git a/patches/0006-Add-xlocale-header-in-include-locale.patch b/patches/0006-Add-xlocale-header-in-include-locale.patch deleted file mode 100644 index 807e8cb..0000000 --- a/patches/0006-Add-xlocale-header-in-include-locale.patch +++ /dev/null @@ -1,30 +0,0 @@ -From accb12e021cc8f2750c606345dba19f7a66cc5ed Mon Sep 17 00:00:00 2001 -From: Stefan Jumarea -Date: Sat, 29 Oct 2022 12:27:20 +0300 -Subject: [PATCH] Add xlocale header in include/locale - -The `include/locale` file needs `strtoll_l` and -`strtoull_l`. They are defined as inlines in -the `xlocale.h` header. - -Signed-off-by: Stefan Jumarea ---- - include/locale | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/include/locale b/include/locale -index 3fe443002..550cbfda5 100644 ---- a/include/locale -+++ b/include/locale -@@ -211,6 +211,8 @@ template class messages_byname; - #pragma GCC system_header - #endif - -+#include -+ - _LIBCPP_PUSH_MACROS - #include <__undef_macros> - --- -2.25.1 - diff --git a/patches/0007-Include-the-first-stddef-header-file.patch b/patches/0007-Include-the-first-stddef-header-file.patch deleted file mode 100644 index 80a05d9..0000000 --- a/patches/0007-Include-the-first-stddef-header-file.patch +++ /dev/null @@ -1,26 +0,0 @@ -From ba952bed536bce35464e5060bc563ff597fa6f3b Mon Sep 17 00:00:00 2001 -From: Stefan Jumarea -Date: Sat, 29 Oct 2022 13:11:24 +0300 -Subject: [PATCH] Include the first `stddef.h` header file. - -Signed-off-by: Stefan Jumarea ---- - include/cstddef | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/include/cstddef b/include/cstddef -index bd62d6db3..0baf2ad07 100644 ---- a/include/cstddef -+++ b/include/cstddef -@@ -41,7 +41,7 @@ Types: - #endif - - // Don't include our own ; we don't want to declare ::nullptr_t. --#include_next -+#include - #include <__nullptr> - - _LIBCPP_BEGIN_NAMESPACE_STD --- -2.25.1 - diff --git a/patches/0009-Add-strtof_l-strtod_l-header.patch b/patches/0009-Add-strtof_l-strtod_l-header.patch deleted file mode 100644 index 7d7f829..0000000 --- a/patches/0009-Add-strtof_l-strtod_l-header.patch +++ /dev/null @@ -1,23 +0,0 @@ -From c924cd52b45e2ab32368ca011a8f51a3e561d088 Mon Sep 17 00:00:00 2001 -From: Maria Sfiraiala -Date: Sun, 30 Oct 2022 20:00:39 +0200 -Subject: [PATCH] Add strtof_l, strtod_l header - -Signed-off-by: Maria Sfiraiala ---- -diff --git a/include/locale b/include/locale -index c9ec7c36f582..9068f88117a7 100644 ---- a/include/locale -+++ b/include/locale -@@ -817,6 +817,8 @@ __num_get_unsigned_integral(const char* __a, const char* __a_end, - return 0; - } - -+#include <__strtonum_fallback.h> -+ - template - _LIBCPP_INLINE_VISIBILITY - _Tp __do_strtod(const char* __a, char** __p2); --- -2.25.1 - diff --git a/patches/0010-Use-libcxx-math-header-file-when-building-with-musl.patch b/patches/0010-Use-libcxx-math-header-file-when-building-with-musl.patch deleted file mode 100644 index 57b42d0..0000000 --- a/patches/0010-Use-libcxx-math-header-file-when-building-with-musl.patch +++ /dev/null @@ -1,32 +0,0 @@ -From aa8a5049bd9036d5da88c49a45442e787bc06ef7 Mon Sep 17 00:00:00 2001 -From: Stefan Jumarea -Date: Fri, 4 Nov 2022 12:53:17 +0200 -Subject: [PATCH] Use libcxx math.h header file when building with musl - -Signed-off-by: Stefan Jumarea ---- - include/cmath | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/include/cmath b/include/cmath -index ffb1c46c7..32acad23e 100644 ---- a/include/cmath -+++ b/include/cmath -@@ -301,8 +301,14 @@ long double truncl(long double x); - - */ - -+#include - #include <__config> -+ -+#ifdef CONFIG_LIBMUSL -+#include -+#else - #include -+#endif - - #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) - #pragma GCC system_header --- -2.25.1 - diff --git a/patches/0011-Add-vasprintf-definition-needed-by-__bsd_locale_fall.patch b/patches/0011-Add-vasprintf-definition-needed-by-__bsd_locale_fall.patch deleted file mode 100644 index 9fb5895..0000000 --- a/patches/0011-Add-vasprintf-definition-needed-by-__bsd_locale_fall.patch +++ /dev/null @@ -1,48 +0,0 @@ -From 47349ae4318953ea882108da36b679d23c73718d Mon Sep 17 00:00:00 2001 -From: Maria Sfiraiala -Date: Mon, 14 Nov 2022 11:35:49 +0200 -Subject: [PATCH] Add vasprintf definition needed by __bsd_locale_fallbacks.h - -Compilation step for __bsd_locale_fallbacks.h requires having a working -definition of vasprintf. This symbol is defined in -include/support/ibm/xlocale.h, however it wouldn't make sense for us -to use headers made for ibm. - -This commit adds the needed function in include/support/musl. - -Signed-off-by: Maria Sfiraiala ---- - include/__bsd_locale_fallbacks.h | 1 + - include/support/musl/xlocale.h | 20 ++++++++++++++++++++ - 2 files changed, 21 insertions(+) - -diff --git a/include/__bsd_locale_fallbacks.h b/include/__bsd_locale_fallbacks.h -index 9abd7e7e5ff4..3c31c2db3aa1 100644 ---- a/include/__bsd_locale_fallbacks.h -+++ b/include/__bsd_locale_fallbacks.h -@@ -15,7 +15,8 @@ - - #include - #include - #include -+#include - - #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) - # pragma GCC system_header -diff --git a/include/support/musl/xlocale.h b/include/support/musl/xlocale.h -index f564c87885ac..318a5a173e3f 100644 ---- a/include/support/musl/xlocale.h -+++ b/include/support/musl/xlocale.h -@@ -49,6 +49,8 @@ static inline long double wcstold_l(const wchar_t *nptr, wchar_t **endptr, - locale_t) { - return wcstold(nptr, endptr); - } - -+int vasprintf(char **strp, const char *fmt, va_list ap); -+ - #ifdef __cplusplus - } - #endif // _LIBCPP_SUPPORT_MUSL_XLOCALE_H --- -2.25.1 -