diff options
Diffstat (limited to 'modules/fdlibm/inexact-math-override/math.h')
-rw-r--r-- | modules/fdlibm/inexact-math-override/math.h | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/modules/fdlibm/inexact-math-override/math.h b/modules/fdlibm/inexact-math-override/math.h new file mode 100644 index 0000000000..8b437ed163 --- /dev/null +++ b/modules/fdlibm/inexact-math-override/math.h @@ -0,0 +1,86 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/** + * This is intended for use only with vendored C libraries where editing the + * source files to explicitly use fdblim is not desirable due to maintenance + * burden. cmath for C++ is not supported. + * + * Use LOCAL_INCLUDES += ['/modules/fdlibm/inexact-math-override'] to + * substitute fdlibm math functions for inexact functions in system libraries. + * + * This is intended to remove fingerprinting entropy due to variations in + * return values from system libaries. Exact functions are not substituted + * because these are expected to return consistent results regardless of + * implementation. sqrt() is considered exact as correct rounding is required + * by IEEE-754. + */ + +#ifndef MODULES_FDLIBM_INEXACT_MATH_OVERRIDE_MATH_H_ +#define MODULES_FDLIBM_INEXACT_MATH_OVERRIDE_MATH_H_ + +#include_next <math.h> + +#include <fdlibm.h> + +#define acos fdlibm_acos +#define acosf fdlibm_acosf +#define asin fdlibm_asin +#define asinf fdlibm_asinf +#define atan fdlibm_atan +#define atanf fdlibm_atanf +#define atan2 fdlibm_atan2 +#define cos fdlibm_cos +#define cosf fdlibm_cosf +#define sin fdlibm_sin +#define sinf fdlibm_sinf +#define tan fdlibm_tan +#define tanf fdlibm_tanf +#define cosh fdlibm_cosh +#define sinh fdlibm_sinh +#define tanh fdlibm_tanh +#define exp fdlibm_exp +#define expf fdlibm_expf +#define exp2 fdlibm_exp2 +#define exp2f fdlibm_exp2f +#define log fdlibm_log +#define logf fdlibm_logf +#define log10 fdlibm_log10 +#define log10f fdlibm_log10f +#define pow fdlibm_pow +#define powf fdlibm_powf +#define acosh fdlibm_acosh +#define asinh fdlibm_asinh +#define atanh fdlibm_atanh +#define cbrt fdlibm_cbrt +#define expm1 fdlibm_expm1 +#define hypot fdlibm_hypot +#define hypotf fdlibm_hypotf +#define log1p fdlibm_log1p +#define log2 fdlibm_log2 + +// These functions are not yet vendored from fdlibm but are defined here to +// catch any uses that would imply that they should be vendored. +#define coshf fdlibm_coshf +#define sinhf fdlibm_sinhf +#define tanhf fdlibm_tanhf +#define acoshf fdlibm_acoshf +#define asinhf fdlibm_asinhf +#define atanhf fdlibm_atanhf +#define cbrtf fdlibm_cbrtf +#define expm1f fdlibm_expm1f +#define log1pf fdlibm_log1pf +#define log2f fdlibm_log2f +#define erf fdlibm_erf +#define erff fdlibm_erff +#define erfc fdlibm_erfc +#define erfcf fdlibm_erfcf +#define tgamma fdlibm_tgamma +#define tgammaf fdlibm_tgammaf +#define lgamma fdlibm_lgamma +#define lgammaf fdlibm_lgammaf + +#endif // MODULES_FDLIBM_INEXACT_MATH_OVERRIDE_MATH_H_ |