From 538f123b07b56ea80a749931646efe4f2a9e386c Mon Sep 17 00:00:00 2001 From: Iulian Moraru Date: Thu, 12 Aug 2021 13:33:31 +0300 Subject: [PATCH] Backed out 6 changesets (bug 531915) for causing build bustages. CLOSED TREE Backed out changeset 65cf5929d5f2 (bug 531915) Backed out changeset c9d70e46dfca (bug 531915) Backed out changeset a4824d5f29fd (bug 531915) Backed out changeset 9ec88b43d7a1 (bug 531915) Backed out changeset 5f15204ccca9 (bug 531915) Backed out changeset 14c95ef3dc44 (bug 531915) --- .../test/browser/browser.ini | 1 - .../test/browser/browser_math.js | 107 ----- js/public/CompileOptions.h | 2 - .../basic/fdlibm-for-sin-cos-tan-argument.js | 7 - js/src/jsapi.cpp | 3 - js/src/jsapi.h | 10 - js/src/jsmath.cpp | 70 +-- js/src/jsmath.h | 11 +- js/src/shell/js.cpp | 8 +- js/src/shell/jsshell.h | 2 - js/src/wasm/WasmBuiltins.cpp | 26 +- js/xpconnect/src/XPCJSContext.cpp | 4 - modules/fdlibm/import.sh | 16 +- ...include_fdlibm_h_from_math_private_h.patch | 169 ------- .../08_remove_weak_reference_macro.patch | 48 -- .../09_comment_out_rcsid_variable.patch | 193 -------- ...e_u_int32_t_and_u_int64_t_on_windows.patch | 2 +- ...ve_unneeded_round_to_integer_helpers.patch | 77 ++- ...mulate_freebsd_internal_double_types.patch | 32 -- .../fdlibm/patches/21_rem_pio_fixups.patch | 88 ---- .../22_build_and_export_sin_cos_and_tan.patch | 47 -- modules/fdlibm/src/e_rem_pio2.cpp | 179 ------- modules/fdlibm/src/fdlibm.h | 4 - modules/fdlibm/src/k_cos.cpp | 78 ---- modules/fdlibm/src/k_rem_pio2.cpp | 442 ------------------ modules/fdlibm/src/k_sin.cpp | 69 --- modules/fdlibm/src/k_tan.cpp | 131 ------ modules/fdlibm/src/math_private.h | 64 +-- modules/fdlibm/src/moz.build | 7 - modules/fdlibm/src/s_cos.cpp | 84 ---- modules/fdlibm/src/s_sin.cpp | 84 ---- modules/fdlibm/src/s_tan.cpp | 78 ---- modules/fdlibm/update.sh | 2 +- modules/libpref/init/StaticPrefList.yaml | 8 - .../resistfingerprinting/nsRFPService.cpp | 7 - 35 files changed, 79 insertions(+), 2081 deletions(-) delete mode 100644 browser/components/resistfingerprinting/test/browser/browser_math.js delete mode 100644 js/src/jit-test/tests/basic/fdlibm-for-sin-cos-tan-argument.js delete mode 100644 modules/fdlibm/patches/20_emulate_freebsd_internal_double_types.patch delete mode 100644 modules/fdlibm/patches/21_rem_pio_fixups.patch delete mode 100644 modules/fdlibm/patches/22_build_and_export_sin_cos_and_tan.patch delete mode 100644 modules/fdlibm/src/e_rem_pio2.cpp delete mode 100644 modules/fdlibm/src/k_cos.cpp delete mode 100644 modules/fdlibm/src/k_rem_pio2.cpp delete mode 100644 modules/fdlibm/src/k_sin.cpp delete mode 100644 modules/fdlibm/src/k_tan.cpp delete mode 100644 modules/fdlibm/src/s_cos.cpp delete mode 100644 modules/fdlibm/src/s_sin.cpp delete mode 100644 modules/fdlibm/src/s_tan.cpp diff --git a/browser/components/resistfingerprinting/test/browser/browser.ini b/browser/components/resistfingerprinting/test/browser/browser.ini index 2d5a702a80f3..a9f351029af5 100644 --- a/browser/components/resistfingerprinting/test/browser/browser.ini +++ b/browser/components/resistfingerprinting/test/browser/browser.ini @@ -20,7 +20,6 @@ https_first_disabled = true skip-if = (os == "mac") #Bug 1570812 os == 'linux' && bits == 64 && !debug # Bug 1570812 -[browser_math.js] [browser_navigator.js] https_first_disabled = true skip-if = diff --git a/browser/components/resistfingerprinting/test/browser/browser_math.js b/browser/components/resistfingerprinting/test/browser/browser_math.js deleted file mode 100644 index 66a71145907f..000000000000 --- a/browser/components/resistfingerprinting/test/browser/browser_math.js +++ /dev/null @@ -1,107 +0,0 @@ -/** - * Bug 531915 - A test for verifying that the JS Math fingerprint is constant - * when using fdlibm for Math.sin, Math.cos, and Math.tan. - */ - -async function test_math(rfp_pref, fdlibm_pref) { - await SpecialPowers.pushPrefEnv({ - set: [ - ["javascript.options.use_fdlibm_for_sin_cos_tan", fdlibm_pref], - ["privacy.resistFingerprinting", rfp_pref], - ], - }); - - let tab = await BrowserTestUtils.openNewForegroundTab( - gBrowser, - TEST_PATH + "file_dummy.html" - ); - - await SpecialPowers.spawn(tab.linkedBrowser, [], async function() { - // override is to check strict equality like we would do in a JS ref test. - function strictly_is(a, b) { - ok(a === b); - } - - // - // Tests adapted from https://github.com/arkenfox/TZP/blob/5e3f5ff2c64b4edc7beecd8308aa4f7a3efb49e3/tests/math.html#L158-L319 - // - strictly_is(Math.cos(1e251), -0.37419577499634155); - strictly_is(Math.cos(1e140), -0.7854805190645291); - strictly_is(Math.cos(1e12), 0.7914463018528902); - strictly_is(Math.cos(1e130), -0.767224894221913); - strictly_is(Math.cos(1e272), -0.7415825695514536); - strictly_is(Math.cos(1), 0.5403023058681398); - strictly_is(Math.cos(1e284), 0.7086865671674247); - strictly_is(Math.cos(1e75), -0.7482651726250321); - strictly_is(Math.cos(Math.PI), -1); - strictly_is(Math.cos(-1e308), -0.8913089376870335); - strictly_is(Math.cos(13 * Math.E), -0.7108118501064332); - strictly_is(Math.cos(57 * Math.E), -0.536911695749024); - strictly_is(Math.cos(21 * Math.LN2), -0.4067775970251724); - strictly_is(Math.cos(51 * Math.LN2), -0.7017203400855446); - strictly_is(Math.cos(21 * Math.LOG2E), 0.4362848063618998); - strictly_is(Math.cos(25 * Math.SQRT2), -0.6982689820462377); - strictly_is(Math.cos(50 * Math.SQRT1_2), -0.6982689820462377); - strictly_is(Math.cos(21 * Math.SQRT1_2), -0.6534063185820198); - strictly_is(Math.cos(17 * Math.LOG10E), 0.4537557425982784); - strictly_is(Math.cos(2 * Math.LOG10E), 0.6459044007438142); - - strictly_is(Math.sin(1e251), -0.9273497301314576); - strictly_is(Math.sin(1e140), -0.6188863822787813); - strictly_is(Math.sin(1e12), -0.6112387023768895); - strictly_is(Math.sin(1e130), 0.6413781736901984); - strictly_is(Math.sin(1e272), 0.6708616046081811); - strictly_is(Math.sin(1), 0.8414709848078965); - strictly_is(Math.sin(1e284), -0.7055234578073583); - strictly_is(Math.sin(1e75), 0.66339975236386); - strictly_is(Math.sin(Math.PI), 1.2246467991473532e-16); - strictly_is(Math.sin(39 * Math.E), -0.7181630308570678); - strictly_is(Math.sin(35 * Math.LN2), -0.765996413898051); - strictly_is(Math.sin(110 * Math.LOG2E), 0.9989410140273757); - strictly_is(Math.sin(7 * Math.LOG10E), 0.10135692924965616); - strictly_is(Math.sin(35 * Math.SQRT1_2), -0.3746357547858202); - strictly_is(Math.sin(21 * Math.SQRT2), -0.9892668187780497); - - strictly_is(Math.tan(1e251), 2.478247463217681); - strictly_is(Math.tan(1e140), 0.7879079967710036); - strictly_is(Math.tan(1e12), -0.7723059681318761); - strictly_is(Math.tan(1e130), -0.8359715365344825); - strictly_is(Math.tan(1e272), -0.904635076595654); - strictly_is(Math.tan(1), 1.5574077246549023); - strictly_is(Math.tan(1e284), -0.9955366596368418); - strictly_is(Math.tan(1e75), -0.8865837628611647); - strictly_is(Math.tan(-1e308), 0.5086861259107568); - strictly_is(Math.tan(Math.PI), -1.2246467991473532e-16); - strictly_is(Math.tan(6 * Math.E), 0.6866761546452431); - strictly_is(Math.tan(6 * Math.LN2), 1.6182817135715877); - strictly_is(Math.tan(10 * Math.LOG2E), -3.3537128705376014); - strictly_is(Math.tan(17 * Math.SQRT2), -1.9222955461799982); - strictly_is(Math.tan(34 * Math.SQRT1_2), -1.9222955461799982); - strictly_is(Math.tan(10 * Math.LOG10E), 2.5824856130712432); - - // - // Tests adapted from https://github.com/fingerprintjs/fingerprintjs/blob/7096a5589af495f1f46067963e13ad27d887d185/src/sources/math.ts#L32-L64 - // - strictly_is(Math.acos(0.123124234234234242), 1.4473588658278522); - strictly_is(Math.acosh(1e308), 709.889355822726); - strictly_is(Math.asin(0.123124234234234242), 0.12343746096704435); - strictly_is(Math.asinh(1), 0.881373587019543); - strictly_is(Math.atanh(0.5), 0.5493061443340548); - strictly_is(Math.atan(0.5), 0.4636476090008061); - strictly_is(Math.sin(-1e300), 0.8178819121159085); - strictly_is(Math.sinh(1), 1.1752011936438014); - strictly_is(Math.cos(10.000000000123), -0.8390715290095377); - strictly_is(Math.cosh(1), 1.5430806348152437); - strictly_is(Math.tan(-1e300), -1.4214488238747245); - strictly_is(Math.tanh(1), 0.7615941559557649); - strictly_is(Math.exp(1), 2.718281828459045); - strictly_is(Math.expm1(1), 1.718281828459045); - strictly_is(Math.log1p(10), 2.3978952727983707); - }); - - BrowserTestUtils.removeTab(tab); -} - -add_task(test_math.bind(null, false, true)); -add_task(test_math.bind(null, true, false)); -add_task(test_math.bind(null, true, true)); diff --git a/js/public/CompileOptions.h b/js/public/CompileOptions.h index acd9a8bb5e48..e5fa9b9d195d 100644 --- a/js/public/CompileOptions.h +++ b/js/public/CompileOptions.h @@ -167,8 +167,6 @@ class JS_PUBLIC_API TransitiveCompileOptions { uint32_t introductionOffset = 0; bool hasIntroductionInfo = false; - bool useFdlibmForSinCosTan = false; - protected: TransitiveCompileOptions() = default; diff --git a/js/src/jit-test/tests/basic/fdlibm-for-sin-cos-tan-argument.js b/js/src/jit-test/tests/basic/fdlibm-for-sin-cos-tan-argument.js deleted file mode 100644 index e46a8259bcc1..000000000000 --- a/js/src/jit-test/tests/basic/fdlibm-for-sin-cos-tan-argument.js +++ /dev/null @@ -1,7 +0,0 @@ -// |jit-test| --use-fdlibm-for-sin-cos-tan -// Test that fdlibm is being used for sin, cos, and tan. - -// Tests adapted from https://github.com/arkenfox/TZP/blob/master/tests/math.html#L158-L319 -assertEq(Math.cos(1e284), 0.7086865671674247); -assertEq(Math.sin(7*Math.LOG10E), 0.10135692924965616); -assertEq(Math.tan(6*Math.E), 0.6866761546452431); diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp index 8eb9fef96130..6382fc174fc5 100644 --- a/js/src/jsapi.cpp +++ b/js/src/jsapi.cpp @@ -2329,7 +2329,6 @@ void JS::TransitiveCompileOptions::copyPODTransitiveOptions( classStaticBlocks = rhs.classStaticBlocks; useStencilXDR = rhs.useStencilXDR; useOffThreadParseGlobal = rhs.useOffThreadParseGlobal; - useFdlibmForSinCosTan = rhs.useFdlibmForSinCosTan; }; void JS::ReadOnlyCompileOptions::copyPODNonTransitiveOptions( @@ -2418,8 +2417,6 @@ JS::CompileOptions::CompileOptions(JSContext* cx) : ReadOnlyCompileOptions() { useStencilXDR = !UseOffThreadParseGlobal(); useOffThreadParseGlobal = UseOffThreadParseGlobal(); - useFdlibmForSinCosTan = math_use_fdlibm_for_sin_cos_tan(); - sourcePragmas_ = cx->options().sourcePragmas(); // Certain modes of operation force strict-mode in general. diff --git a/js/src/jsapi.h b/js/src/jsapi.h index 1d2b7e948f14..7821ff575f15 100644 --- a/js/src/jsapi.h +++ b/js/src/jsapi.h @@ -64,16 +64,6 @@ /************************************************************************/ -namespace JS { -/** - * Tell JS engine whether to use fdlibm for Math.sin, Math.cos, and Math.tan. - * Using fdlibm ensures that we don't expose a math fingerprint. - */ -extern JS_PUBLIC_API void SetUseFdlibmForSinCosTan(bool value); -} // namespace JS - -/************************************************************************/ - struct JSFunctionSpec; struct JSPropertySpec; diff --git a/js/src/jsmath.cpp b/js/src/jsmath.cpp index e167a5c291a0..cacd861004a1 100644 --- a/js/src/jsmath.cpp +++ b/js/src/jsmath.cpp @@ -52,12 +52,6 @@ using mozilla::NumberEqualsInt32; using mozilla::PositiveInfinity; using mozilla::WrappingMultiply; -static mozilla::Atomic sUseFdlibmForSinCosTan; - -JS_PUBLIC_API void JS::SetUseFdlibmForSinCosTan(bool value) { - sUseFdlibmForSinCosTan = value; -} - template static bool math_function(JSContext* cx, HandleValue val, MutableHandleValue res) { @@ -212,25 +206,13 @@ bool js::math_clz32(JSContext* cx, unsigned argc, Value* vp) { return true; } -bool js::math_use_fdlibm_for_sin_cos_tan() { return sUseFdlibmForSinCosTan; } - -double js::math_cos_fdlibm_impl(double x) { - MOZ_ASSERT(sUseFdlibmForSinCosTan); - AutoUnsafeCallWithABI unsafe; - return fdlibm::cos(x); -} - -double js::math_cos_native_impl(double x) { - MOZ_ASSERT(!sUseFdlibmForSinCosTan); +double js::math_cos_impl(double x) { AutoUnsafeCallWithABI unsafe; return cos(x); } bool js::math_cos(JSContext* cx, unsigned argc, Value* vp) { - if (sUseFdlibmForSinCosTan) { - return math_function(cx, argc, vp); - } - return math_function(cx, argc, vp); + return math_function(cx, argc, vp); } double js::math_exp_impl(double x) { @@ -600,31 +582,18 @@ js::math_round(JSContext* cx, unsigned argc, Value* vp) { return math_round_handle(cx, args[0], args.rval()); } -double js::math_sin_fdlibm_impl(double x) { - MOZ_ASSERT(sUseFdlibmForSinCosTan); - AutoUnsafeCallWithABI unsafe; - return fdlibm::sin(x); -} - -double js::math_sin_native_impl(double x) { - MOZ_ASSERT(!sUseFdlibmForSinCosTan); +double js::math_sin_impl(double x) { AutoUnsafeCallWithABI unsafe(UnsafeABIStrictness::AllowPendingExceptions); return sin(x); } bool js::math_sin_handle(JSContext* cx, HandleValue val, MutableHandleValue res) { - if (sUseFdlibmForSinCosTan) { - return math_function(cx, val, res); - } - return math_function(cx, val, res); + return math_function(cx, val, res); } bool js::math_sin(JSContext* cx, unsigned argc, Value* vp) { - if (sUseFdlibmForSinCosTan) { - return math_function(cx, argc, vp); - } - return math_function(cx, argc, vp); + return math_function(cx, argc, vp); } double js::math_sqrt_impl(double x) { @@ -641,23 +610,13 @@ bool js::math_sqrt(JSContext* cx, unsigned argc, Value* vp) { return math_function(cx, argc, vp); } -double js::math_tan_fdlibm_impl(double x) { - MOZ_ASSERT(sUseFdlibmForSinCosTan); - AutoUnsafeCallWithABI unsafe; - return fdlibm::tan(x); -} - -double js::math_tan_native_impl(double x) { - MOZ_ASSERT(!sUseFdlibmForSinCosTan); +double js::math_tan_impl(double x) { AutoUnsafeCallWithABI unsafe; return tan(x); } bool js::math_tan(JSContext* cx, unsigned argc, Value* vp) { - if (sUseFdlibmForSinCosTan) { - return math_function(cx, argc, vp); - } - return math_function(cx, argc, vp); + return math_function(cx, argc, vp); } double js::math_log10_impl(double x) { @@ -926,22 +885,13 @@ UnaryMathFunctionType js::GetUnaryMathFunctionPtr(UnaryMathFunction fun) { case UnaryMathFunction::Log: return math_log_impl; case UnaryMathFunction::Sin: - if (sUseFdlibmForSinCosTan) { - return math_sin_fdlibm_impl; - } - return math_sin_native_impl; + return math_sin_impl; case UnaryMathFunction::Cos: - if (sUseFdlibmForSinCosTan) { - return math_cos_fdlibm_impl; - } - return math_cos_native_impl; + return math_cos_impl; case UnaryMathFunction::Exp: return math_exp_impl; case UnaryMathFunction::Tan: - if (sUseFdlibmForSinCosTan) { - return math_tan_fdlibm_impl; - } - return math_tan_native_impl; + return math_tan_impl; case UnaryMathFunction::ATan: return math_atan_impl; case UnaryMathFunction::ASin: diff --git a/js/src/jsmath.h b/js/src/jsmath.h index 04e405b4632a..500de464e62a 100644 --- a/js/src/jsmath.h +++ b/js/src/jsmath.h @@ -109,20 +109,16 @@ extern double math_log_impl(double x); extern bool math_log_handle(JSContext* cx, HandleValue val, MutableHandleValue res); -extern bool math_use_fdlibm_for_sin_cos_tan(); - extern bool math_sin(JSContext* cx, unsigned argc, js::Value* vp); -extern double math_sin_fdlibm_impl(double x); -extern double math_sin_native_impl(double x); +extern double math_sin_impl(double x); extern bool math_sin_handle(JSContext* cx, HandleValue val, MutableHandleValue res); extern bool math_cos(JSContext* cx, unsigned argc, js::Value* vp); -extern double math_cos_fdlibm_impl(double x); -extern double math_cos_native_impl(double x); +extern double math_cos_impl(double x); extern bool math_exp(JSContext* cx, unsigned argc, js::Value* vp); @@ -130,8 +126,7 @@ extern double math_exp_impl(double x); extern bool math_tan(JSContext* cx, unsigned argc, js::Value* vp); -extern double math_tan_fdlibm_impl(double x); -extern double math_tan_native_impl(double x); +extern double math_tan_impl(double x); extern bool math_log10(JSContext* cx, unsigned argc, js::Value* vp); diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp index 472d38e0734b..50048483aedb 100644 --- a/js/src/shell/js.cpp +++ b/js/src/shell/js.cpp @@ -638,8 +638,6 @@ bool shell::compileOnly = false; bool shell::disableOOMFunctions = false; bool shell::defaultToSameCompartment = true; -bool shell::useFdlibmForSinCosTan = false; - #ifdef DEBUG bool shell::dumpEntrainedVariables = false; bool shell::OOM_printAllocationCount = false; @@ -11276,7 +11274,6 @@ static bool SetContextOptions(JSContext* cx, const OptionParser& op) { enableTopLevelAwait = op.getBoolOption("enable-top-level-await"); enableClassStaticBlocks = op.getBoolOption("enable-class-static-blocks"); useOffThreadParseGlobal = op.getBoolOption("off-thread-parse-global"); - useFdlibmForSinCosTan = op.getBoolOption("use-fdlibm-for-sin-cos-tan"); JS::ContextOptionsRef(cx) .setAsmJS(enableAsmJS) @@ -11310,7 +11307,6 @@ static bool SetContextOptions(JSContext* cx, const OptionParser& op) { .setClassStaticBlocks(enableClassStaticBlocks); JS::SetUseOffThreadParseGlobal(useOffThreadParseGlobal); - JS::SetUseFdlibmForSinCosTan(useFdlibmForSinCosTan); // Check --fast-warmup first because it sets default warm-up thresholds. These // thresholds can then be overridden below by --ion-eager and other flags. @@ -12494,9 +12490,7 @@ int main(int argc, char** argv) { !op.addBoolOption('\0', "reprl", "Enable REPRL mode for fuzzing") || #endif !op.addStringOption('\0', "telemetry-dir", "[directory]", - "Output telemetry results in a directory") || - !op.addBoolOption('\0', "use-fdlibm-for-sin-cos-tan", - "Use fdlibm for Math.sin, Math.cos, and Math.tan")) { + "Output telemetry results in a directory")) { return EXIT_FAILURE; } diff --git a/js/src/shell/jsshell.h b/js/src/shell/jsshell.h index cff0c5c84242..bea760dba4ff 100644 --- a/js/src/shell/jsshell.h +++ b/js/src/shell/jsshell.h @@ -157,8 +157,6 @@ extern bool dumpEntrainedVariables; extern bool OOM_printAllocationCount; #endif -extern bool useFdlibmForSinCosTan; - extern UniqueChars processWideModuleLoadPath; // Alias the global dstName to namespaceObj.srcName. For example, if dstName is diff --git a/js/src/wasm/WasmBuiltins.cpp b/js/src/wasm/WasmBuiltins.cpp index bad3db394a09..50e1faf98da3 100644 --- a/js/src/wasm/WasmBuiltins.cpp +++ b/js/src/wasm/WasmBuiltins.cpp @@ -1427,12 +1427,10 @@ bool wasm::NeedsBuiltinThunk(SymbolicAddress sym) { // Each JS builtin can have several overloads. These must all be enumerated in // PopulateTypedNatives() so they can be included in the process-wide thunk set. -#define FOR_EACH_SIN_COS_TAN_NATIVE(_) \ - _(math_sin, MathSin) \ - _(math_tan, MathTan) \ - _(math_cos, MathCos) - #define FOR_EACH_UNARY_NATIVE(_) \ + _(math_sin, MathSin) \ + _(math_tan, MathTan) \ + _(math_cos, MathCos) \ _(math_exp, MathExp) \ _(math_log, MathLog) \ _(math_asin, MathASin) \ @@ -1457,14 +1455,6 @@ bool wasm::NeedsBuiltinThunk(SymbolicAddress sym) { _(ecmaHypot, MathHypot) \ _(ecmaPow, MathPow) -#define DEFINE_SIN_COS_TAN_FLOAT_WRAPPER(func, _) \ - static float func##_impl_f32(float x) { \ - if (math_use_fdlibm_for_sin_cos_tan()) { \ - return float(func##_fdlibm_impl(double(x))); \ - } \ - return float(func##_native_impl(double(x))); \ - } - #define DEFINE_UNARY_FLOAT_WRAPPER(func, _) \ static float func##_impl_f32(float x) { \ return float(func##_impl(double(x))); \ @@ -1475,7 +1465,6 @@ bool wasm::NeedsBuiltinThunk(SymbolicAddress sym) { return float(func(double(x), double(y))); \ } -FOR_EACH_SIN_COS_TAN_NATIVE(DEFINE_SIN_COS_TAN_FLOAT_WRAPPER) FOR_EACH_UNARY_NATIVE(DEFINE_UNARY_FLOAT_WRAPPER) FOR_EACH_BINARY_NATIVE(DEFINE_BINARY_FLOAT_WRAPPER) @@ -1507,14 +1496,6 @@ static bool PopulateTypedNatives(TypedNativeToFuncPtrMap* typedNatives) { FuncCast(funcName, abiType))) \ return false; -#define ADD_SIN_COS_TAN_OVERLOADS(funcName, native) \ - if (math_use_fdlibm_for_sin_cos_tan()) { \ - ADD_OVERLOAD(funcName##_fdlibm_impl, native, Args_Double_Double) \ - } else { \ - ADD_OVERLOAD(funcName##_native_impl, native, Args_Double_Double) \ - } \ - ADD_OVERLOAD(funcName##_impl_f32, native, Args_Float32_Float32) - #define ADD_UNARY_OVERLOADS(funcName, native) \ ADD_OVERLOAD(funcName##_impl, native, Args_Double_Double) \ ADD_OVERLOAD(funcName##_impl_f32, native, Args_Float32_Float32) @@ -1523,7 +1504,6 @@ static bool PopulateTypedNatives(TypedNativeToFuncPtrMap* typedNatives) { ADD_OVERLOAD(funcName, native, Args_Double_DoubleDouble) \ ADD_OVERLOAD(funcName##_f32, native, Args_Float32_Float32Float32) - FOR_EACH_SIN_COS_TAN_NATIVE(ADD_SIN_COS_TAN_OVERLOADS) FOR_EACH_UNARY_NATIVE(ADD_UNARY_OVERLOADS) FOR_EACH_BINARY_NATIVE(ADD_BINARY_OVERLOADS) diff --git a/js/xpconnect/src/XPCJSContext.cpp b/js/xpconnect/src/XPCJSContext.cpp index 3a2ced1ccd3d..4ece7b9df3a8 100644 --- a/js/xpconnect/src/XPCJSContext.cpp +++ b/js/xpconnect/src/XPCJSContext.cpp @@ -1048,10 +1048,6 @@ static void ReloadPrefsCallback(const char* pref, void* aXpccx) { .setErgnomicBrandChecks(ergnomicBrandChecksEnabled) .setTopLevelAwait(topLevelAwaitEnabled); - JS::SetUseFdlibmForSinCosTan( - Preferences::GetBool(JS_OPTIONS_DOT_STR "use_fdlibm_for_sin_cos_tan") || - Preferences::GetBool("privacy.resistFingerprinting")); - nsCOMPtr xr = do_GetService("@mozilla.org/xre/runtime;1"); if (xr) { bool safeMode = false; diff --git a/modules/fdlibm/import.sh b/modules/fdlibm/import.sh index 216be47aced4..11acb064b7ab 100644 --- a/modules/fdlibm/import.sh +++ b/modules/fdlibm/import.sh @@ -2,7 +2,7 @@ set -e -BASE_URL=https://raw.githubusercontent.com/freebsd/freebsd-src/"${1}"/lib/msun/src +BASE_URL=https://raw.githubusercontent.com/freebsd/freebsd/"${1}"/lib/msun/src download_source() { REMOTE_FILENAME=$1 @@ -46,9 +46,7 @@ download_source s_cbrt.c s_cbrt.cpp download_source s_ceil.c s_ceil.cpp download_source s_ceilf.c s_ceilf.cpp -# Math.cos -download_source s_cos.c s_cos.cpp -download_source k_cos.c k_cos.cpp +# Math.cos (not used due to poor performance) # Math.cosh download_source e_cosh.c e_cosh.cpp @@ -83,18 +81,14 @@ download_source e_log2.c e_log2.cpp # Math.pow (not used due to poor performance) -# Math.sin -download_source s_sin.c s_sin.cpp -download_source k_sin.c k_sin.cpp +# Math.sin (not used due to poor performance) # Math.sinh download_source e_sinh.c e_sinh.cpp # Math.sqrt (not used due to poor performance) -# Math.tan -download_source s_tan.c s_tan.cpp -download_source k_tan.c k_tan.cpp +# Math.tan (not used due to poor performance) # Math.tanh download_source s_tanh.c s_tanh.cpp @@ -104,8 +98,6 @@ download_source s_trunc.c s_trunc.cpp download_source s_truncf.c s_truncf.cpp # dependencies -download_source e_rem_pio2.c e_rem_pio2.cpp -download_source k_rem_pio2.c k_rem_pio2.cpp download_source k_exp.c k_exp.cpp download_source s_copysign.c s_copysign.cpp download_source s_fabs.c s_fabs.cpp diff --git a/modules/fdlibm/patches/04_include_fdlibm_h_from_math_private_h.patch b/modules/fdlibm/patches/04_include_fdlibm_h_from_math_private_h.patch index 3ea4553104c2..15301890218e 100644 --- a/modules/fdlibm/patches/04_include_fdlibm_h_from_math_private_h.patch +++ b/modules/fdlibm/patches/04_include_fdlibm_h_from_math_private_h.patch @@ -693,172 +693,3 @@ diff --git a/modules/fdlibm/src/s_truncf.cpp b/modules/fdlibm/src/s_truncf.cpp truncf(float x) { int32_t i0,j0; -diff --git a/modules/fdlibm/src/e_rem_pio2.cpp b/modules/fdlibm/src/e_rem_pio2.cpp ---- a/modules/fdlibm/src/e_rem_pio2.cpp -+++ b/modules/fdlibm/src/e_rem_pio2.cpp -@@ -19,17 +19,16 @@ - /* __ieee754_rem_pio2(x,y) - * - * return the remainder of x rem pi/2 in y[0]+y[1] - * use __kernel_rem_pio2() - */ - - #include - --#include "math.h" - #include "math_private.h" - - /* - * invpio2: 53 bits of 2/pi - * pio2_1: first 33 bit of pi/2 - * pio2_1t: pi/2 - pio2_1 - * pio2_2: second 33 bit of pi/2 - * pio2_2t: pi/2 - (pio2_1+pio2_2) - -diff --git a/modules/fdlibm/src/k_cos.cpp b/modules/fdlibm/src/k_cos.cpp ---- a/modules/fdlibm/src/k_cos.cpp -+++ b/modules/fdlibm/src/k_cos.cpp -@@ -48,17 +48,16 @@ - * and tmp having the same precision as x. If they have extra - * precision due to compiler bugs, then the extra precision is - * only good provided it is retained in all terms of the final - * expression for cos(). Retention happens in all cases tested - * under FreeBSD, so don't pessimize things by forcibly clipping - * any extra precision in w. - */ - --#include "math.h" - #include "math_private.h" - - static const double - one = 1.00000000000000000000e+00, /* 0x3FF00000, 0x00000000 */ - C1 = 4.16666666666666019037e-02, /* 0x3FA55555, 0x5555554C */ - C2 = -1.38888888888741095749e-03, /* 0xBF56C16C, 0x16C15177 */ - C3 = 2.48015872894767294178e-05, /* 0x3EFA01A0, 0x19CB1590 */ - C4 = -2.75573143513906633035e-07, /* 0xBE927E4F, 0x809C52AD */ -diff --git a/modules/fdlibm/src/k_rem_pio2.cpp b/modules/fdlibm/src/k_rem_pio2.cpp ---- a/modules/fdlibm/src/k_rem_pio2.cpp -+++ b/modules/fdlibm/src/k_rem_pio2.cpp -@@ -126,17 +126,16 @@ - * The hexadecimal values are the intended ones for the following - * constants. The decimal values may be used, provided that the - * compiler will convert from decimal to binary accurately enough - * to produce the hexadecimal values shown. - */ - - #include - --#include "math.h" - #include "math_private.h" - - static const int init_jk[] = {3,4,4,6}; /* initial value for jk */ - - /* - * Table of constants for 2/pi, 396 Hex digits (476 decimal) of 2/pi - * - * integer array, contains the (24*i)-th to (24*i+23)-th -diff --git a/modules/fdlibm/src/k_sin.cpp b/modules/fdlibm/src/k_sin.cpp ---- a/modules/fdlibm/src/k_sin.cpp -+++ b/modules/fdlibm/src/k_sin.cpp -@@ -39,17 +39,16 @@ - * ~ sin(x) + (1-x*x/2)*y - * For better accuracy, let - * 3 2 2 2 2 - * r = x *(S2+x *(S3+x *(S4+x *(S5+x *S6)))) - * then 3 2 - * sin(x) = x + (S1*x + (x *(r-y/2)+y)) - */ - --#include "math.h" - #include "math_private.h" - - static const double - half = 5.00000000000000000000e-01, /* 0x3FE00000, 0x00000000 */ - S1 = -1.66666666666666324348e-01, /* 0xBFC55555, 0x55555549 */ - S2 = 8.33333333332248946124e-03, /* 0x3F811111, 0x1110F8A6 */ - S3 = -1.98412698298579493134e-04, /* 0xBF2A01A0, 0x19C161D5 */ - S4 = 2.75573137070700676789e-06, /* 0x3EC71DE3, 0x57B1FE7D */ -diff --git a/modules/fdlibm/src/k_tan.cpp b/modules/fdlibm/src/k_tan.cpp ---- a/modules/fdlibm/src/k_tan.cpp -+++ b/modules/fdlibm/src/k_tan.cpp -@@ -44,17 +44,16 @@ - * 3 2 - * tan(x+y) = x + (T1*x + (x *(r+y)+y)) - * - * 4. For x in [0.67434,pi/4], let y = pi/4 - x, then - * tan(x) = tan(pi/4-y) = (1-tan(y))/(1+tan(y)) - * = 1 - 2*(tan(y) - (tan(y)^2)/(1+tan(y))) - */ - --#include "math.h" - #include "math_private.h" - static const double xxx[] = { - 3.33333333333334091986e-01, /* 3FD55555, 55555563 */ - 1.33333333333201242699e-01, /* 3FC11111, 1110FE7A */ - 5.39682539762260521377e-02, /* 3FABA1BA, 1BB341FE */ - 2.18694882948595424599e-02, /* 3F9664F4, 8406D637 */ - 8.86323982359930005737e-03, /* 3F8226E3, E96E8493 */ - 3.59207910759131235356e-03, /* 3F6D6D22, C9560328 */ -diff --git a/modules/fdlibm/src/s_cos.cpp b/modules/fdlibm/src/s_cos.cpp ---- a/modules/fdlibm/src/s_cos.cpp -+++ b/modules/fdlibm/src/s_cos.cpp -@@ -41,17 +41,16 @@ - * trig(NaN) is that NaN; - * - * Accuracy: - * TRIG(x) returns trig(x) nearly rounded - */ - - #include - --#include "math.h" - #define INLINE_REM_PIO2 - #include "math_private.h" - #include "e_rem_pio2.c" - - double - cos(double x) - { - double y[2],z=0.0; -diff --git a/modules/fdlibm/src/s_sin.cpp b/modules/fdlibm/src/s_sin.cpp ---- a/modules/fdlibm/src/s_sin.cpp -+++ b/modules/fdlibm/src/s_sin.cpp -@@ -41,17 +41,16 @@ - * trig(NaN) is that NaN; - * - * Accuracy: - * TRIG(x) returns trig(x) nearly rounded - */ - - #include - --#include "math.h" - #define INLINE_REM_PIO2 - #include "math_private.h" - #include "e_rem_pio2.c" - - double - sin(double x) - { - double y[2],z=0.0; -diff --git a/modules/fdlibm/src/s_tan.cpp b/modules/fdlibm/src/s_tan.cpp ---- a/modules/fdlibm/src/s_tan.cpp -+++ b/modules/fdlibm/src/s_tan.cpp -@@ -40,17 +40,16 @@ - * trig(NaN) is that NaN; - * - * Accuracy: - * TRIG(x) returns trig(x) nearly rounded - */ - - #include - --#include "math.h" - #define INLINE_REM_PIO2 - #include "math_private.h" - #include "e_rem_pio2.c" - - double - tan(double x) - { - double y[2],z=0.0; \ No newline at end of file diff --git a/modules/fdlibm/patches/08_remove_weak_reference_macro.patch b/modules/fdlibm/patches/08_remove_weak_reference_macro.patch index 904886fbddbc..0b55bbd84c69 100644 --- a/modules/fdlibm/patches/08_remove_weak_reference_macro.patch +++ b/modules/fdlibm/patches/08_remove_weak_reference_macro.patch @@ -383,51 +383,3 @@ diff --git a/modules/fdlibm/src/s_trunc.cpp b/modules/fdlibm/src/s_trunc.cpp -#if LDBL_MANT_DIG == 53 -__weak_reference(trunc, truncl); -#endif -diff --git a/modules/fdlibm/src/s_cos.cpp b/modules/fdlibm/src/s_cos.cpp ---- a/modules/fdlibm/src/s_cos.cpp -+++ b/modules/fdlibm/src/s_cos.cpp -@@ -78,12 +78,8 @@ cos(double x) - case 0: return __kernel_cos(y[0],y[1]); - case 1: return -__kernel_sin(y[0],y[1],1); - case 2: return -__kernel_cos(y[0],y[1]); - default: - return __kernel_sin(y[0],y[1],1); - } - } - } -- --#if (LDBL_MANT_DIG == 53) --__weak_reference(cos, cosl); --#endif -diff --git a/modules/fdlibm/src/s_sin.cpp b/modules/fdlibm/src/s_sin.cpp ---- a/modules/fdlibm/src/s_sin.cpp -+++ b/modules/fdlibm/src/s_sin.cpp -@@ -78,12 +78,8 @@ sin(double x) - case 0: return __kernel_sin(y[0],y[1],1); - case 1: return __kernel_cos(y[0],y[1]); - case 2: return -__kernel_sin(y[0],y[1],1); - default: - return -__kernel_cos(y[0],y[1]); - } - } - } -- --#if (LDBL_MANT_DIG == 53) --__weak_reference(sin, sinl); --#endif -diff --git a/modules/fdlibm/src/s_tan.cpp b/modules/fdlibm/src/s_tan.cpp ---- a/modules/fdlibm/src/s_tan.cpp -+++ b/modules/fdlibm/src/s_tan.cpp -@@ -72,12 +72,8 @@ tan(double x) - - /* argument reduction needed */ - else { - n = __ieee754_rem_pio2(x,y); - return __kernel_tan(y[0],y[1],1-((n&1)<<1)); /* 1 -- n even - -1 -- n odd */ - } - } -- --#if (LDBL_MANT_DIG == 53) --__weak_reference(tan, tanl); --#endif diff --git a/modules/fdlibm/patches/09_comment_out_rcsid_variable.patch b/modules/fdlibm/patches/09_comment_out_rcsid_variable.patch index 0d3096217092..d520d925764c 100644 --- a/modules/fdlibm/patches/09_comment_out_rcsid_variable.patch +++ b/modules/fdlibm/patches/09_comment_out_rcsid_variable.patch @@ -810,196 +810,3 @@ diff --git a/modules/fdlibm/src/s_truncf.cpp b/modules/fdlibm/src/s_truncf.cpp * Bit twiddling. * Exception: * Inexact flag raised if x not equal to truncf(x). -diff --git a/modules/fdlibm/src/e_rem_pio2.cpp b/modules/fdlibm/src/e_rem_pio2.cpp ---- a/modules/fdlibm/src/e_rem_pio2.cpp -+++ b/modules/fdlibm/src/e_rem_pio2.cpp -@@ -8,18 +8,18 @@ - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - * - * Optimized by Bruce D. Evans. - */ - --#include --__FBSDID("$FreeBSD$"); -+//#include -+//__FBSDID("$FreeBSD$"); - - /* __ieee754_rem_pio2(x,y) - * - * return the remainder of x rem pi/2 in y[0]+y[1] - * use __kernel_rem_pio2() - */ - - #include - -diff --git a/modules/fdlibm/src/k_cos.cpp b/modules/fdlibm/src/k_cos.cpp ---- a/modules/fdlibm/src/k_cos.cpp -+++ b/modules/fdlibm/src/k_cos.cpp -@@ -6,18 +6,18 @@ - * - * Developed at SunSoft, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - --#include --__FBSDID("$FreeBSD$"); -+//#include -+//__FBSDID("$FreeBSD$"); - - /* - * __kernel_cos( x, y ) - * kernel cos function on [-pi/4, pi/4], pi/4 ~ 0.785398164 - * Input x is assumed to be bounded by ~pi/4 in magnitude. - * Input y is the tail of x. - * - * Algorithm -diff --git a/modules/fdlibm/src/k_rem_pio2.cpp b/modules/fdlibm/src/k_rem_pio2.cpp ---- a/modules/fdlibm/src/k_rem_pio2.cpp -+++ b/modules/fdlibm/src/k_rem_pio2.cpp -@@ -6,18 +6,18 @@ - * - * Developed at SunSoft, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - --#include --__FBSDID("$FreeBSD$"); -+//#include -+//__FBSDID("$FreeBSD$"); - - /* - * __kernel_rem_pio2(x,y,e0,nx,prec) - * double x[],y[]; int e0,nx,prec; - * - * __kernel_rem_pio2 return the last three digits of N with - * y = x - N*pi/2 - * so that |y| < pi/2. -diff --git a/modules/fdlibm/src/k_sin.cpp b/modules/fdlibm/src/k_sin.cpp ---- a/modules/fdlibm/src/k_sin.cpp -+++ b/modules/fdlibm/src/k_sin.cpp -@@ -6,18 +6,18 @@ - * - * Developed at SunSoft, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - --#include --__FBSDID("$FreeBSD$"); -+//#include -+//__FBSDID("$FreeBSD$"); - - /* __kernel_sin( x, y, iy) - * kernel sin function on ~[-pi/4, pi/4] (except on -0), pi/4 ~ 0.7854 - * Input x is assumed to be bounded by ~pi/4 in magnitude. - * Input y is the tail of x. - * Input iy indicates whether y is 0. (if iy=0, y assume to be 0). - * - * Algorithm -diff --git a/modules/fdlibm/src/k_tan.cpp b/modules/fdlibm/src/k_tan.cpp ---- a/modules/fdlibm/src/k_tan.cpp -+++ b/modules/fdlibm/src/k_tan.cpp -@@ -6,18 +6,18 @@ - * - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - - /* INDENT OFF */ --#include --__FBSDID("$FreeBSD$"); -+//#include -+//__FBSDID("$FreeBSD$"); - - /* __kernel_tan( x, y, k ) - * kernel tan function on ~[-pi/4, pi/4] (except on -0), pi/4 ~ 0.7854 - * Input x is assumed to be bounded by ~pi/4 in magnitude. - * Input y is the tail of x. - * Input k indicates whether tan (if k = 1) or -1/tan (if k = -1) is returned. - * - * Algorithm -diff --git a/modules/fdlibm/src/s_cos.cpp b/modules/fdlibm/src/s_cos.cpp ---- a/modules/fdlibm/src/s_cos.cpp -+++ b/modules/fdlibm/src/s_cos.cpp -@@ -5,18 +5,18 @@ - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - --#include --__FBSDID("$FreeBSD$"); -+//#include -+//__FBSDID("$FreeBSD$"); - - /* cos(x) - * Return cosine function of x. - * - * kernel function: - * __kernel_sin ... sine function on [-pi/4,pi/4] - * __kernel_cos ... cosine function on [-pi/4,pi/4] - * __ieee754_rem_pio2 ... argument reduction routine -diff --git a/modules/fdlibm/src/s_sin.cpp b/modules/fdlibm/src/s_sin.cpp ---- a/modules/fdlibm/src/s_sin.cpp -+++ b/modules/fdlibm/src/s_sin.cpp -@@ -5,18 +5,18 @@ - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - --#include --__FBSDID("$FreeBSD$"); -+//#include -+//__FBSDID("$FreeBSD$"); - - /* sin(x) - * Return sine function of x. - * - * kernel function: - * __kernel_sin ... sine function on [-pi/4,pi/4] - * __kernel_cos ... cose function on [-pi/4,pi/4] - * __ieee754_rem_pio2 ... argument reduction routine -diff --git a/modules/fdlibm/src/s_tan.cpp b/modules/fdlibm/src/s_tan.cpp ---- a/modules/fdlibm/src/s_tan.cpp -+++ b/modules/fdlibm/src/s_tan.cpp -@@ -5,18 +5,18 @@ - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - --#include --__FBSDID("$FreeBSD$"); -+//#include -+//__FBSDID("$FreeBSD$"); - - /* tan(x) - * Return tangent function of x. - * - * kernel function: - * __kernel_tan ... tangent function on [-pi/4,pi/4] - * __ieee754_rem_pio2 ... argument reduction routine - * \ No newline at end of file diff --git a/modules/fdlibm/patches/12_define_u_int32_t_and_u_int64_t_on_windows.patch b/modules/fdlibm/patches/12_define_u_int32_t_and_u_int64_t_on_windows.patch index a2f57a8ada75..106d64dbc4ec 100644 --- a/modules/fdlibm/patches/12_define_u_int32_t_and_u_int64_t_on_windows.patch +++ b/modules/fdlibm/patches/12_define_u_int32_t_and_u_int64_t_on_windows.patch @@ -20,7 +20,7 @@ diff --git a/modules/fdlibm/src/math_private.h b/modules/fdlibm/src/math_private /* A union which permits us to convert between a long double and four 32 bit ints. */ - #if MOZ_BIG_ENDIAN() + #if MOZ_BIG_ENDIAN typedef union { diff --git a/modules/fdlibm/patches/19_remove_unneeded_round_to_integer_helpers.patch b/modules/fdlibm/patches/19_remove_unneeded_round_to_integer_helpers.patch index 056987c590ea..6d1baa23a806 100644 --- a/modules/fdlibm/patches/19_remove_unneeded_round_to_integer_helpers.patch +++ b/modules/fdlibm/patches/19_remove_unneeded_round_to_integer_helpers.patch @@ -1,15 +1,46 @@ diff --git a/modules/fdlibm/src/math_private.h b/modules/fdlibm/src/math_private.h --- a/modules/fdlibm/src/math_private.h +++ b/modules/fdlibm/src/math_private.h -@@ -617,95 +617,32 @@ rnint(double x) - * magic number would need to be variable. Assuming that the - * rounding precision is always the default is too fragile. This - * and many other complications will move when the default is - * changed to FP_PE. - */ - return ((double)(x + 0x1.8p52) - 0x1.8p52); +@@ -586,126 +586,16 @@ CMPLXL(long double x, long double y) + REALPART(z) = x; + IMAGPART(z) = y; + return (z.f); } + #endif + #endif /* _COMPLEX_H */ + +-/* +- * The rnint() family rounds to the nearest integer for a restricted range +- * range of args (up to about 2**MANT_DIG). We assume that the current +- * rounding mode is FE_TONEAREST so that this can be done efficiently. +- * Extra precision causes more problems in practice, and we only centralize +- * this here to reduce those problems, and have not solved the efficiency +- * problems. The exp2() family uses a more delicate version of this that +- * requires extracting bits from the intermediate value, so it is not +- * centralized here and should copy any solution of the efficiency problems. +- */ +- +-static inline double +-rnint(__double_t x) +-{ +- /* +- * This casts to double to kill any extra precision. This depends +- * on the cast being applied to a double_t to avoid compiler bugs +- * (this is a cleaner version of STRICT_ASSIGN()). This is +- * inefficient if there actually is extra precision, but is hard +- * to improve on. We use double_t in the API to minimise conversions +- * for just calling here. Note that we cannot easily change the +- * magic number to the one that works directly with double_t, since +- * the rounding precision is variable at runtime on x86 so the +- * magic number would need to be variable. Assuming that the +- * rounding precision is always the default is too fragile. This +- * and many other complications will move when the default is +- * changed to FP_PE. +- */ +- return ((double)(x + 0x1.8p52) - 0x1.8p52); +-} +- -static inline float -rnintf(__float_t x) -{ @@ -40,22 +71,22 @@ diff --git a/modules/fdlibm/src/math_private.h b/modules/fdlibm/src/math_private -} -#endif /* LDBL_MANT_DIG */ - - /* - * irint() and i64rint() give the same result as casting to their integer - * return type provided their arg is a floating point integer. They can - * sometimes be more efficient because no rounding is required. - */ - #if (defined(amd64) || defined(__i386__)) && defined(__GNUCLIKE_ASM) - #define irint(x) \ - (sizeof(x) == sizeof(float) && \ - sizeof(__float_t) == sizeof(long double) ? irintf(x) : \ - sizeof(x) == sizeof(double) && \ - sizeof(__double_t) == sizeof(long double) ? irintd(x) : \ - sizeof(x) == sizeof(long double) ? irintl(x) : (int)(x)) - #else - #define irint(x) ((int)(x)) - #endif - +-/* +- * irint() and i64rint() give the same result as casting to their integer +- * return type provided their arg is a floating point integer. They can +- * sometimes be more efficient because no rounding is required. +- */ +-#if (defined(amd64) || defined(__i386__)) && defined(__GNUCLIKE_ASM) +-#define irint(x) \ +- (sizeof(x) == sizeof(float) && \ +- sizeof(__float_t) == sizeof(long double) ? irintf(x) : \ +- sizeof(x) == sizeof(double) && \ +- sizeof(__double_t) == sizeof(long double) ? irintd(x) : \ +- sizeof(x) == sizeof(long double) ? irintl(x) : (int)(x)) +-#else +-#define irint(x) ((int)(x)) +-#endif +- -#define i64rint(x) ((int64_t)(x)) /* only needed for ld128 so not opt. */ - -#if defined(__i386__) && defined(__GNUCLIKE_ASM) diff --git a/modules/fdlibm/patches/20_emulate_freebsd_internal_double_types.patch b/modules/fdlibm/patches/20_emulate_freebsd_internal_double_types.patch deleted file mode 100644 index f6e65034e9cf..000000000000 --- a/modules/fdlibm/patches/20_emulate_freebsd_internal_double_types.patch +++ /dev/null @@ -1,32 +0,0 @@ -diff --git a/modules/fdlibm/src/math_private.h b/modules/fdlibm/src/math_private.h ---- a/modules/fdlibm/src/math_private.h -+++ b/modules/fdlibm/src/math_private.h -@@ -21,16 +21,28 @@ - #include - #include - - #include "fdlibm.h" - - #include "mozilla/EndianUtils.h" - - /* -+ * Emulate FreeBSD internal double types. -+ * Adapted from https://github.com/freebsd/freebsd-src/search?q=__double_t -+ */ -+ -+#if defined(__i386__) -+typedef long double __double_t; -+#else -+typedef double __double_t; -+#endif -+typedef __double_t double_t; -+ -+/* - * The original fdlibm code used statements like: - * n0 = ((*(int*)&one)>>29)^1; * index of high word * - * ix0 = *(n0+(int*)&x); * high word of x * - * ix1 = *((1-n0)+(int*)&x); * low word of x * - * to dig two 32 bit words out of the 64 bit IEEE floating point - * value. That is non-ANSI, and, moreover, the gcc instruction - * scheduler gets it wrong. We instead use the following macros. - * Unlike the original code, we determine the endianness at compile diff --git a/modules/fdlibm/patches/21_rem_pio_fixups.patch b/modules/fdlibm/patches/21_rem_pio_fixups.patch deleted file mode 100644 index 1f2e16a57659..000000000000 --- a/modules/fdlibm/patches/21_rem_pio_fixups.patch +++ /dev/null @@ -1,88 +0,0 @@ -diff --git a/modules/fdlibm/src/e_rem_pio2.cpp b/modules/fdlibm/src/e_rem_pio2.cpp ---- a/modules/fdlibm/src/e_rem_pio2.cpp -+++ b/modules/fdlibm/src/e_rem_pio2.cpp -@@ -43,17 +43,17 @@ invpio2 = 6.36619772367581382433e-01, / - pio2_1 = 1.57079632673412561417e+00, /* 0x3FF921FB, 0x54400000 */ - pio2_1t = 6.07710050650619224932e-11, /* 0x3DD0B461, 0x1A626331 */ - pio2_2 = 6.07710050630396597660e-11, /* 0x3DD0B461, 0x1A600000 */ - pio2_2t = 2.02226624879595063154e-21, /* 0x3BA3198A, 0x2E037073 */ - pio2_3 = 2.02226624871116645580e-21, /* 0x3BA3198A, 0x2E000000 */ - pio2_3t = 8.47842766036889956997e-32; /* 0x397B839A, 0x252049C1 */ - - #ifdef INLINE_REM_PIO2 --static __inline __always_inline -+static inline - #endif - int - __ieee754_rem_pio2(double x, double *y) - { - double z,w,t,r,fn; - double tx[3],ty[2]; - int32_t e0,i,j,nx,n,ix,hx; - u_int32_t low; -diff --git a/modules/fdlibm/src/s_cos.cpp b/modules/fdlibm/src/s_cos.cpp ---- a/modules/fdlibm/src/s_cos.cpp -+++ b/modules/fdlibm/src/s_cos.cpp -@@ -43,17 +43,17 @@ - * Accuracy: - * TRIG(x) returns trig(x) nearly rounded - */ - - #include - - #define INLINE_REM_PIO2 - #include "math_private.h" --#include "e_rem_pio2.c" -+#include "e_rem_pio2.cpp" - - double - cos(double x) - { - double y[2],z=0.0; - int32_t n, ix; - - /* High word of x. */ -diff --git a/modules/fdlibm/src/s_sin.cpp b/modules/fdlibm/src/s_sin.cpp ---- a/modules/fdlibm/src/s_sin.cpp -+++ b/modules/fdlibm/src/s_sin.cpp -@@ -43,17 +43,17 @@ - * Accuracy: - * TRIG(x) returns trig(x) nearly rounded - */ - - #include - - #define INLINE_REM_PIO2 - #include "math_private.h" --#include "e_rem_pio2.c" -+#include "e_rem_pio2.cpp" - - double - sin(double x) - { - double y[2],z=0.0; - int32_t n, ix; - - /* High word of x. */ -diff --git a/modules/fdlibm/src/s_tan.cpp b/modules/fdlibm/src/s_tan.cpp ---- a/modules/fdlibm/src/s_tan.cpp -+++ b/modules/fdlibm/src/s_tan.cpp -@@ -42,17 +42,17 @@ - * Accuracy: - * TRIG(x) returns trig(x) nearly rounded - */ - - #include - - #define INLINE_REM_PIO2 - #include "math_private.h" --#include "e_rem_pio2.c" -+#include "e_rem_pio2.cpp" - - double - tan(double x) - { - double y[2],z=0.0; - int32_t n, ix; - - /* High word of x. */ diff --git a/modules/fdlibm/patches/22_build_and_export_sin_cos_and_tan.patch b/modules/fdlibm/patches/22_build_and_export_sin_cos_and_tan.patch deleted file mode 100644 index 3836d855c24d..000000000000 --- a/modules/fdlibm/patches/22_build_and_export_sin_cos_and_tan.patch +++ /dev/null @@ -1,47 +0,0 @@ -diff --git a/modules/fdlibm/src/fdlibm.h b/modules/fdlibm/src/fdlibm.h ---- a/modules/fdlibm/src/fdlibm.h -+++ b/modules/fdlibm/src/fdlibm.h -@@ -19,16 +19,20 @@ - - namespace fdlibm { - - double acos(double); - double asin(double); - double atan(double); - double atan2(double, double); - -+double cos(double); -+double sin(double); -+double tan(double); -+ - double cosh(double); - double sinh(double); - double tanh(double); - - double exp(double); - double log(double); - double log10(double); - -diff --git a/modules/fdlibm/src/math_private.h b/modules/fdlibm/src/math_private.h ---- a/modules/fdlibm/src/math_private.h -+++ b/modules/fdlibm/src/math_private.h -@@ -832,16 +832,19 @@ rnint(double_t x) - #define __ieee754_ynf ynf - #define __ieee754_remainderf remainderf - #define __ieee754_scalbf scalbf - - #define acos fdlibm::acos - #define asin fdlibm::asin - #define atan fdlibm::atan - #define atan2 fdlibm::atan2 -+#define cos fdlibm::cos -+#define sin fdlibm::sin -+#define tan fdlibm::tan - #define cosh fdlibm::cosh - #define sinh fdlibm::sinh - #define tanh fdlibm::tanh - #define exp fdlibm::exp - #define log fdlibm::log - #define log10 fdlibm::log10 - #define pow fdlibm::pow - #define ceil fdlibm::ceil diff --git a/modules/fdlibm/src/e_rem_pio2.cpp b/modules/fdlibm/src/e_rem_pio2.cpp deleted file mode 100644 index 1e5e1cc9f4f0..000000000000 --- a/modules/fdlibm/src/e_rem_pio2.cpp +++ /dev/null @@ -1,179 +0,0 @@ - -/* @(#)e_rem_pio2.c 1.4 95/01/18 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunSoft, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - * - * Optimized by Bruce D. Evans. - */ - -//#include -//__FBSDID("$FreeBSD$"); - -/* __ieee754_rem_pio2(x,y) - * - * return the remainder of x rem pi/2 in y[0]+y[1] - * use __kernel_rem_pio2() - */ - -#include - -#include "math_private.h" - -/* - * invpio2: 53 bits of 2/pi - * pio2_1: first 33 bit of pi/2 - * pio2_1t: pi/2 - pio2_1 - * pio2_2: second 33 bit of pi/2 - * pio2_2t: pi/2 - (pio2_1+pio2_2) - * pio2_3: third 33 bit of pi/2 - * pio2_3t: pi/2 - (pio2_1+pio2_2+pio2_3) - */ - -static const double -zero = 0.00000000000000000000e+00, /* 0x00000000, 0x00000000 */ -two24 = 1.67772160000000000000e+07, /* 0x41700000, 0x00000000 */ -invpio2 = 6.36619772367581382433e-01, /* 0x3FE45F30, 0x6DC9C883 */ -pio2_1 = 1.57079632673412561417e+00, /* 0x3FF921FB, 0x54400000 */ -pio2_1t = 6.07710050650619224932e-11, /* 0x3DD0B461, 0x1A626331 */ -pio2_2 = 6.07710050630396597660e-11, /* 0x3DD0B461, 0x1A600000 */ -pio2_2t = 2.02226624879595063154e-21, /* 0x3BA3198A, 0x2E037073 */ -pio2_3 = 2.02226624871116645580e-21, /* 0x3BA3198A, 0x2E000000 */ -pio2_3t = 8.47842766036889956997e-32; /* 0x397B839A, 0x252049C1 */ - -#ifdef INLINE_REM_PIO2 -static inline -#endif -int -__ieee754_rem_pio2(double x, double *y) -{ - double z,w,t,r,fn; - double tx[3],ty[2]; - int32_t e0,i,j,nx,n,ix,hx; - u_int32_t low; - - GET_HIGH_WORD(hx,x); /* high word of x */ - ix = hx&0x7fffffff; -#if 0 /* Must be handled in caller. */ - if(ix<=0x3fe921fb) /* |x| ~<= pi/4 , no need for reduction */ - {y[0] = x; y[1] = 0; return 0;} -#endif - if (ix <= 0x400f6a7a) { /* |x| ~<= 5pi/4 */ - if ((ix & 0xfffff) == 0x921fb) /* |x| ~= pi/2 or 2pi/2 */ - goto medium; /* cancellation -- use medium case */ - if (ix <= 0x4002d97c) { /* |x| ~<= 3pi/4 */ - if (hx > 0) { - z = x - pio2_1; /* one round good to 85 bits */ - y[0] = z - pio2_1t; - y[1] = (z-y[0])-pio2_1t; - return 1; - } else { - z = x + pio2_1; - y[0] = z + pio2_1t; - y[1] = (z-y[0])+pio2_1t; - return -1; - } - } else { - if (hx > 0) { - z = x - 2*pio2_1; - y[0] = z - 2*pio2_1t; - y[1] = (z-y[0])-2*pio2_1t; - return 2; - } else { - z = x + 2*pio2_1; - y[0] = z + 2*pio2_1t; - y[1] = (z-y[0])+2*pio2_1t; - return -2; - } - } - } - if (ix <= 0x401c463b) { /* |x| ~<= 9pi/4 */ - if (ix <= 0x4015fdbc) { /* |x| ~<= 7pi/4 */ - if (ix == 0x4012d97c) /* |x| ~= 3pi/2 */ - goto medium; - if (hx > 0) { - z = x - 3*pio2_1; - y[0] = z - 3*pio2_1t; - y[1] = (z-y[0])-3*pio2_1t; - return 3; - } else { - z = x + 3*pio2_1; - y[0] = z + 3*pio2_1t; - y[1] = (z-y[0])+3*pio2_1t; - return -3; - } - } else { - if (ix == 0x401921fb) /* |x| ~= 4pi/2 */ - goto medium; - if (hx > 0) { - z = x - 4*pio2_1; - y[0] = z - 4*pio2_1t; - y[1] = (z-y[0])-4*pio2_1t; - return 4; - } else { - z = x + 4*pio2_1; - y[0] = z + 4*pio2_1t; - y[1] = (z-y[0])+4*pio2_1t; - return -4; - } - } - } - if(ix<0x413921fb) { /* |x| ~< 2^20*(pi/2), medium size */ -medium: - fn = rnint((double_t)x*invpio2); - n = irint(fn); - r = x-fn*pio2_1; - w = fn*pio2_1t; /* 1st round good to 85 bit */ - { - u_int32_t high; - j = ix>>20; - y[0] = r-w; - GET_HIGH_WORD(high,y[0]); - i = j-((high>>20)&0x7ff); - if(i>16) { /* 2nd iteration needed, good to 118 */ - t = r; - w = fn*pio2_2; - r = t-w; - w = fn*pio2_2t-((t-r)-w); - y[0] = r-w; - GET_HIGH_WORD(high,y[0]); - i = j-((high>>20)&0x7ff); - if(i>49) { /* 3rd iteration need, 151 bits acc */ - t = r; /* will cover all possible cases */ - w = fn*pio2_3; - r = t-w; - w = fn*pio2_3t-((t-r)-w); - y[0] = r-w; - } - } - } - y[1] = (r-y[0])-w; - return n; - } - /* - * all other (large) arguments - */ - if(ix>=0x7ff00000) { /* x is inf or NaN */ - y[0]=y[1]=x-x; return 0; - } - /* set z = scalbn(|x|,ilogb(x)-23) */ - GET_LOW_WORD(low,x); - e0 = (ix>>20)-1046; /* e0 = ilogb(z)-23; */ - INSERT_WORDS(z, ix - ((int32_t)(e0<<20)), low); - for(i=0;i<2;i++) { - tx[i] = (double)((int32_t)(z)); - z = (z-tx[i])*two24; - } - tx[2] = z; - nx = 3; - while(tx[nx-1]==zero) nx--; /* skip zero term */ - n = __kernel_rem_pio2(tx,ty,e0,nx,1); - if(hx<0) {y[0] = -ty[0]; y[1] = -ty[1]; return -n;} - y[0] = ty[0]; y[1] = ty[1]; return n; -} diff --git a/modules/fdlibm/src/fdlibm.h b/modules/fdlibm/src/fdlibm.h index 3cd0ef94c92c..324e5d0b0336 100644 --- a/modules/fdlibm/src/fdlibm.h +++ b/modules/fdlibm/src/fdlibm.h @@ -24,10 +24,6 @@ double asin(double); double atan(double); double atan2(double, double); -double cos(double); -double sin(double); -double tan(double); - double cosh(double); double sinh(double); double tanh(double); diff --git a/modules/fdlibm/src/k_cos.cpp b/modules/fdlibm/src/k_cos.cpp deleted file mode 100644 index 5bee28daf37f..000000000000 --- a/modules/fdlibm/src/k_cos.cpp +++ /dev/null @@ -1,78 +0,0 @@ - -/* @(#)k_cos.c 1.3 95/01/18 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunSoft, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -//#include -//__FBSDID("$FreeBSD$"); - -/* - * __kernel_cos( x, y ) - * kernel cos function on [-pi/4, pi/4], pi/4 ~ 0.785398164 - * Input x is assumed to be bounded by ~pi/4 in magnitude. - * Input y is the tail of x. - * - * Algorithm - * 1. Since cos(-x) = cos(x), we need only to consider positive x. - * 2. if x < 2^-27 (hx<0x3e400000 0), return 1 with inexact if x!=0. - * 3. cos(x) is approximated by a polynomial of degree 14 on - * [0,pi/4] - * 4 14 - * cos(x) ~ 1 - x*x/2 + C1*x + ... + C6*x - * where the remez error is - * - * | 2 4 6 8 10 12 14 | -58 - * |cos(x)-(1-.5*x +C1*x +C2*x +C3*x +C4*x +C5*x +C6*x )| <= 2 - * | | - * - * 4 6 8 10 12 14 - * 4. let r = C1*x +C2*x +C3*x +C4*x +C5*x +C6*x , then - * cos(x) ~ 1 - x*x/2 + r - * since cos(x+y) ~ cos(x) - sin(x)*y - * ~ cos(x) - x*y, - * a correction term is necessary in cos(x) and hence - * cos(x+y) = 1 - (x*x/2 - (r - x*y)) - * For better accuracy, rearrange to - * cos(x+y) ~ w + (tmp + (r-x*y)) - * where w = 1 - x*x/2 and tmp is a tiny correction term - * (1 - x*x/2 == w + tmp exactly in infinite precision). - * The exactness of w + tmp in infinite precision depends on w - * and tmp having the same precision as x. If they have extra - * precision due to compiler bugs, then the extra precision is - * only good provided it is retained in all terms of the final - * expression for cos(). Retention happens in all cases tested - * under FreeBSD, so don't pessimize things by forcibly clipping - * any extra precision in w. - */ - -#include "math_private.h" - -static const double -one = 1.00000000000000000000e+00, /* 0x3FF00000, 0x00000000 */ -C1 = 4.16666666666666019037e-02, /* 0x3FA55555, 0x5555554C */ -C2 = -1.38888888888741095749e-03, /* 0xBF56C16C, 0x16C15177 */ -C3 = 2.48015872894767294178e-05, /* 0x3EFA01A0, 0x19CB1590 */ -C4 = -2.75573143513906633035e-07, /* 0xBE927E4F, 0x809C52AD */ -C5 = 2.08757232129817482790e-09, /* 0x3E21EE9E, 0xBDB4B1C4 */ -C6 = -1.13596475577881948265e-11; /* 0xBDA8FAE9, 0xBE8838D4 */ - -double -__kernel_cos(double x, double y) -{ - double hz,z,r,w; - - z = x*x; - w = z*z; - r = z*(C1+z*(C2+z*C3)) + w*w*(C4+z*(C5+z*C6)); - hz = 0.5*z; - w = one-hz; - return w + (((one-w)-hz) + (z*r-x*y)); -} diff --git a/modules/fdlibm/src/k_rem_pio2.cpp b/modules/fdlibm/src/k_rem_pio2.cpp deleted file mode 100644 index 9b5bad096b0c..000000000000 --- a/modules/fdlibm/src/k_rem_pio2.cpp +++ /dev/null @@ -1,442 +0,0 @@ - -/* @(#)k_rem_pio2.c 1.3 95/01/18 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunSoft, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -//#include -//__FBSDID("$FreeBSD$"); - -/* - * __kernel_rem_pio2(x,y,e0,nx,prec) - * double x[],y[]; int e0,nx,prec; - * - * __kernel_rem_pio2 return the last three digits of N with - * y = x - N*pi/2 - * so that |y| < pi/2. - * - * The method is to compute the integer (mod 8) and fraction parts of - * (2/pi)*x without doing the full multiplication. In general we - * skip the part of the product that are known to be a huge integer ( - * more accurately, = 0 mod 8 ). Thus the number of operations are - * independent of the exponent of the input. - * - * (2/pi) is represented by an array of 24-bit integers in ipio2[]. - * - * Input parameters: - * x[] The input value (must be positive) is broken into nx - * pieces of 24-bit integers in double precision format. - * x[i] will be the i-th 24 bit of x. The scaled exponent - * of x[0] is given in input parameter e0 (i.e., x[0]*2^e0 - * match x's up to 24 bits. - * - * Example of breaking a double positive z into x[0]+x[1]+x[2]: - * e0 = ilogb(z)-23 - * z = scalbn(z,-e0) - * for i = 0,1,2 - * x[i] = floor(z) - * z = (z-x[i])*2**24 - * - * - * y[] output result in an array of double precision numbers. - * The dimension of y[] is: - * 24-bit precision 1 - * 53-bit precision 2 - * 64-bit precision 2 - * 113-bit precision 3 - * The actual value is the sum of them. Thus for 113-bit - * precision, one may have to do something like: - * - * long double t,w,r_head, r_tail; - * t = (long double)y[2] + (long double)y[1]; - * w = (long double)y[0]; - * r_head = t+w; - * r_tail = w - (r_head - t); - * - * e0 The exponent of x[0]. Must be <= 16360 or you need to - * expand the ipio2 table. - * - * nx dimension of x[] - * - * prec an integer indicating the precision: - * 0 24 bits (single) - * 1 53 bits (double) - * 2 64 bits (extended) - * 3 113 bits (quad) - * - * External function: - * double scalbn(), floor(); - * - * - * Here is the description of some local variables: - * - * jk jk+1 is the initial number of terms of ipio2[] needed - * in the computation. The minimum and recommended value - * for jk is 3,4,4,6 for single, double, extended, and quad. - * jk+1 must be 2 larger than you might expect so that our - * recomputation test works. (Up to 24 bits in the integer - * part (the 24 bits of it that we compute) and 23 bits in - * the fraction part may be lost to cancellation before we - * recompute.) - * - * jz local integer variable indicating the number of - * terms of ipio2[] used. - * - * jx nx - 1 - * - * jv index for pointing to the suitable ipio2[] for the - * computation. In general, we want - * ( 2^e0*x[0] * ipio2[jv-1]*2^(-24jv) )/8 - * is an integer. Thus - * e0-3-24*jv >= 0 or (e0-3)/24 >= jv - * Hence jv = max(0,(e0-3)/24). - * - * jp jp+1 is the number of terms in PIo2[] needed, jp = jk. - * - * q[] double array with integral value, representing the - * 24-bits chunk of the product of x and 2/pi. - * - * q0 the corresponding exponent of q[0]. Note that the - * exponent for q[i] would be q0-24*i. - * - * PIo2[] double precision array, obtained by cutting pi/2 - * into 24 bits chunks. - * - * f[] ipio2[] in floating point - * - * iq[] integer array by breaking up q[] in 24-bits chunk. - * - * fq[] final product of x*(2/pi) in fq[0],..,fq[jk] - * - * ih integer. If >0 it indicates q[] is >= 0.5, hence - * it also indicates the *sign* of the result. - * - */ - - -/* - * Constants: - * The hexadecimal values are the intended ones for the following - * constants. The decimal values may be used, provided that the - * compiler will convert from decimal to binary accurately enough - * to produce the hexadecimal values shown. - */ - -#include - -#include "math_private.h" - -static const int init_jk[] = {3,4,4,6}; /* initial value for jk */ - -/* - * Table of constants for 2/pi, 396 Hex digits (476 decimal) of 2/pi - * - * integer array, contains the (24*i)-th to (24*i+23)-th - * bit of 2/pi after binary point. The corresponding - * floating value is - * - * ipio2[i] * 2^(-24(i+1)). - * - * NB: This table must have at least (e0-3)/24 + jk terms. - * For quad precision (e0 <= 16360, jk = 6), this is 686. - */ -static const int32_t ipio2[] = { -0xA2F983, 0x6E4E44, 0x1529FC, 0x2757D1, 0xF534DD, 0xC0DB62, -0x95993C, 0x439041, 0xFE5163, 0xABDEBB, 0xC561B7, 0x246E3A, -0x424DD2, 0xE00649, 0x2EEA09, 0xD1921C, 0xFE1DEB, 0x1CB129, -0xA73EE8, 0x8235F5, 0x2EBB44, 0x84E99C, 0x7026B4, 0x5F7E41, -0x3991D6, 0x398353, 0x39F49C, 0x845F8B, 0xBDF928, 0x3B1FF8, -0x97FFDE, 0x05980F, 0xEF2F11, 0x8B5A0A, 0x6D1F6D, 0x367ECF, -0x27CB09, 0xB74F46, 0x3F669E, 0x5FEA2D, 0x7527BA, 0xC7EBE5, -0xF17B3D, 0x0739F7, 0x8A5292, 0xEA6BFB, 0x5FB11F, 0x8D5D08, -0x560330, 0x46FC7B, 0x6BABF0, 0xCFBC20, 0x9AF436, 0x1DA9E3, -0x91615E, 0xE61B08, 0x659985, 0x5F14A0, 0x68408D, 0xFFD880, -0x4D7327, 0x310606, 0x1556CA, 0x73A8C9, 0x60E27B, 0xC08C6B, - -#if LDBL_MAX_EXP > 1024 -#if LDBL_MAX_EXP > 16384 -#error "ipio2 table needs to be expanded" -#endif -0x47C419, 0xC367CD, 0xDCE809, 0x2A8359, 0xC4768B, 0x961CA6, -0xDDAF44, 0xD15719, 0x053EA5, 0xFF0705, 0x3F7E33, 0xE832C2, -0xDE4F98, 0x327DBB, 0xC33D26, 0xEF6B1E, 0x5EF89F, 0x3A1F35, -0xCAF27F, 0x1D87F1, 0x21907C, 0x7C246A, 0xFA6ED5, 0x772D30, -0x433B15, 0xC614B5, 0x9D19C3, 0xC2C4AD, 0x414D2C, 0x5D000C, -0x467D86, 0x2D71E3, 0x9AC69B, 0x006233, 0x7CD2B4, 0x97A7B4, -0xD55537, 0xF63ED7, 0x1810A3, 0xFC764D, 0x2A9D64, 0xABD770, -0xF87C63, 0x57B07A, 0xE71517, 0x5649C0, 0xD9D63B, 0x3884A7, -0xCB2324, 0x778AD6, 0x23545A, 0xB91F00, 0x1B0AF1, 0xDFCE19, -0xFF319F, 0x6A1E66, 0x615799, 0x47FBAC, 0xD87F7E, 0xB76522, -0x89E832, 0x60BFE6, 0xCDC4EF, 0x09366C, 0xD43F5D, 0xD7DE16, -0xDE3B58, 0x929BDE, 0x2822D2, 0xE88628, 0x4D58E2, 0x32CAC6, -0x16E308, 0xCB7DE0, 0x50C017, 0xA71DF3, 0x5BE018, 0x34132E, -0x621283, 0x014883, 0x5B8EF5, 0x7FB0AD, 0xF2E91E, 0x434A48, -0xD36710, 0xD8DDAA, 0x425FAE, 0xCE616A, 0xA4280A, 0xB499D3, -0xF2A606, 0x7F775C, 0x83C2A3, 0x883C61, 0x78738A, 0x5A8CAF, -0xBDD76F, 0x63A62D, 0xCBBFF4, 0xEF818D, 0x67C126, 0x45CA55, -0x36D9CA, 0xD2A828, 0x8D61C2, 0x77C912, 0x142604, 0x9B4612, -0xC459C4, 0x44C5C8, 0x91B24D, 0xF31700, 0xAD43D4, 0xE54929, -0x10D5FD, 0xFCBE00, 0xCC941E, 0xEECE70, 0xF53E13, 0x80F1EC, -0xC3E7B3, 0x28F8C7, 0x940593, 0x3E71C1, 0xB3092E, 0xF3450B, -0x9C1288, 0x7B20AB, 0x9FB52E, 0xC29247, 0x2F327B, 0x6D550C, -0x90A772, 0x1FE76B, 0x96CB31, 0x4A1679, 0xE27941, 0x89DFF4, -0x9794E8, 0x84E6E2, 0x973199, 0x6BED88, 0x365F5F, 0x0EFDBB, -0xB49A48, 0x6CA467, 0x427271, 0x325D8D, 0xB8159F, 0x09E5BC, -0x25318D, 0x3974F7, 0x1C0530, 0x010C0D, 0x68084B, 0x58EE2C, -0x90AA47, 0x02E774, 0x24D6BD, 0xA67DF7, 0x72486E, 0xEF169F, -0xA6948E, 0xF691B4, 0x5153D1, 0xF20ACF, 0x339820, 0x7E4BF5, -0x6863B2, 0x5F3EDD, 0x035D40, 0x7F8985, 0x295255, 0xC06437, -0x10D86D, 0x324832, 0x754C5B, 0xD4714E, 0x6E5445, 0xC1090B, -0x69F52A, 0xD56614, 0x9D0727, 0x50045D, 0xDB3BB4, 0xC576EA, -0x17F987, 0x7D6B49, 0xBA271D, 0x296996, 0xACCCC6, 0x5414AD, -0x6AE290, 0x89D988, 0x50722C, 0xBEA404, 0x940777, 0x7030F3, -0x27FC00, 0xA871EA, 0x49C266, 0x3DE064, 0x83DD97, 0x973FA3, -0xFD9443, 0x8C860D, 0xDE4131, 0x9D3992, 0x8C70DD, 0xE7B717, -0x3BDF08, 0x2B3715, 0xA0805C, 0x93805A, 0x921110, 0xD8E80F, -0xAF806C, 0x4BFFDB, 0x0F9038, 0x761859, 0x15A562, 0xBBCB61, -0xB989C7, 0xBD4010, 0x04F2D2, 0x277549, 0xF6B6EB, 0xBB22DB, -0xAA140A, 0x2F2689, 0x768364, 0x333B09, 0x1A940E, 0xAA3A51, -0xC2A31D, 0xAEEDAF, 0x12265C, 0x4DC26D, 0x9C7A2D, 0x9756C0, -0x833F03, 0xF6F009, 0x8C402B, 0x99316D, 0x07B439, 0x15200C, -0x5BC3D8, 0xC492F5, 0x4BADC6, 0xA5CA4E, 0xCD37A7, 0x36A9E6, -0x9492AB, 0x6842DD, 0xDE6319, 0xEF8C76, 0x528B68, 0x37DBFC, -0xABA1AE, 0x3115DF, 0xA1AE00, 0xDAFB0C, 0x664D64, 0xB705ED, -0x306529, 0xBF5657, 0x3AFF47, 0xB9F96A, 0xF3BE75, 0xDF9328, -0x3080AB, 0xF68C66, 0x15CB04, 0x0622FA, 0x1DE4D9, 0xA4B33D, -0x8F1B57, 0x09CD36, 0xE9424E, 0xA4BE13, 0xB52333, 0x1AAAF0, -0xA8654F, 0xA5C1D2, 0x0F3F0B, 0xCD785B, 0x76F923, 0x048B7B, -0x721789, 0x53A6C6, 0xE26E6F, 0x00EBEF, 0x584A9B, 0xB7DAC4, -0xBA66AA, 0xCFCF76, 0x1D02D1, 0x2DF1B1, 0xC1998C, 0x77ADC3, -0xDA4886, 0xA05DF7, 0xF480C6, 0x2FF0AC, 0x9AECDD, 0xBC5C3F, -0x6DDED0, 0x1FC790, 0xB6DB2A, 0x3A25A3, 0x9AAF00, 0x9353AD, -0x0457B6, 0xB42D29, 0x7E804B, 0xA707DA, 0x0EAA76, 0xA1597B, -0x2A1216, 0x2DB7DC, 0xFDE5FA, 0xFEDB89, 0xFDBE89, 0x6C76E4, -0xFCA906, 0x70803E, 0x156E85, 0xFF87FD, 0x073E28, 0x336761, -0x86182A, 0xEABD4D, 0xAFE7B3, 0x6E6D8F, 0x396795, 0x5BBF31, -0x48D784, 0x16DF30, 0x432DC7, 0x356125, 0xCE70C9, 0xB8CB30, -0xFD6CBF, 0xA200A4, 0xE46C05, 0xA0DD5A, 0x476F21, 0xD21262, -0x845CB9, 0x496170, 0xE0566B, 0x015299, 0x375550, 0xB7D51E, -0xC4F133, 0x5F6E13, 0xE4305D, 0xA92E85, 0xC3B21D, 0x3632A1, -0xA4B708, 0xD4B1EA, 0x21F716, 0xE4698F, 0x77FF27, 0x80030C, -0x2D408D, 0xA0CD4F, 0x99A520, 0xD3A2B3, 0x0A5D2F, 0x42F9B4, -0xCBDA11, 0xD0BE7D, 0xC1DB9B, 0xBD17AB, 0x81A2CA, 0x5C6A08, -0x17552E, 0x550027, 0xF0147F, 0x8607E1, 0x640B14, 0x8D4196, -0xDEBE87, 0x2AFDDA, 0xB6256B, 0x34897B, 0xFEF305, 0x9EBFB9, -0x4F6A68, 0xA82A4A, 0x5AC44F, 0xBCF82D, 0x985AD7, 0x95C7F4, -0x8D4D0D, 0xA63A20, 0x5F57A4, 0xB13F14, 0x953880, 0x0120CC, -0x86DD71, 0xB6DEC9, 0xF560BF, 0x11654D, 0x6B0701, 0xACB08C, -0xD0C0B2, 0x485551, 0x0EFB1E, 0xC37295, 0x3B06A3, 0x3540C0, -0x7BDC06, 0xCC45E0, 0xFA294E, 0xC8CAD6, 0x41F3E8, 0xDE647C, -0xD8649B, 0x31BED9, 0xC397A4, 0xD45877, 0xC5E369, 0x13DAF0, -0x3C3ABA, 0x461846, 0x5F7555, 0xF5BDD2, 0xC6926E, 0x5D2EAC, -0xED440E, 0x423E1C, 0x87C461, 0xE9FD29, 0xF3D6E7, 0xCA7C22, -0x35916F, 0xC5E008, 0x8DD7FF, 0xE26A6E, 0xC6FDB0, 0xC10893, -0x745D7C, 0xB2AD6B, 0x9D6ECD, 0x7B723E, 0x6A11C6, 0xA9CFF7, -0xDF7329, 0xBAC9B5, 0x5100B7, 0x0DB2E2, 0x24BA74, 0x607DE5, -0x8AD874, 0x2C150D, 0x0C1881, 0x94667E, 0x162901, 0x767A9F, -0xBEFDFD, 0xEF4556, 0x367ED9, 0x13D9EC, 0xB9BA8B, 0xFC97C4, -0x27A831, 0xC36EF1, 0x36C594, 0x56A8D8, 0xB5A8B4, 0x0ECCCF, -0x2D8912, 0x34576F, 0x89562C, 0xE3CE99, 0xB920D6, 0xAA5E6B, -0x9C2A3E, 0xCC5F11, 0x4A0BFD, 0xFBF4E1, 0x6D3B8E, 0x2C86E2, -0x84D4E9, 0xA9B4FC, 0xD1EEEF, 0xC9352E, 0x61392F, 0x442138, -0xC8D91B, 0x0AFC81, 0x6A4AFB, 0xD81C2F, 0x84B453, 0x8C994E, -0xCC2254, 0xDC552A, 0xD6C6C0, 0x96190B, 0xB8701A, 0x649569, -0x605A26, 0xEE523F, 0x0F117F, 0x11B5F4, 0xF5CBFC, 0x2DBC34, -0xEEBC34, 0xCC5DE8, 0x605EDD, 0x9B8E67, 0xEF3392, 0xB817C9, -0x9B5861, 0xBC57E1, 0xC68351, 0x103ED8, 0x4871DD, 0xDD1C2D, -0xA118AF, 0x462C21, 0xD7F359, 0x987AD9, 0xC0549E, 0xFA864F, -0xFC0656, 0xAE79E5, 0x362289, 0x22AD38, 0xDC9367, 0xAAE855, -0x382682, 0x9BE7CA, 0xA40D51, 0xB13399, 0x0ED7A9, 0x480569, -0xF0B265, 0xA7887F, 0x974C88, 0x36D1F9, 0xB39221, 0x4A827B, -0x21CF98, 0xDC9F40, 0x5547DC, 0x3A74E1, 0x42EB67, 0xDF9DFE, -0x5FD45E, 0xA4677B, 0x7AACBA, 0xA2F655, 0x23882B, 0x55BA41, -0x086E59, 0x862A21, 0x834739, 0xE6E389, 0xD49EE5, 0x40FB49, -0xE956FF, 0xCA0F1C, 0x8A59C5, 0x2BFA94, 0xC5C1D3, 0xCFC50F, -0xAE5ADB, 0x86C547, 0x624385, 0x3B8621, 0x94792C, 0x876110, -0x7B4C2A, 0x1A2C80, 0x12BF43, 0x902688, 0x893C78, 0xE4C4A8, -0x7BDBE5, 0xC23AC4, 0xEAF426, 0x8A67F7, 0xBF920D, 0x2BA365, -0xB1933D, 0x0B7CBD, 0xDC51A4, 0x63DD27, 0xDDE169, 0x19949A, -0x9529A8, 0x28CE68, 0xB4ED09, 0x209F44, 0xCA984E, 0x638270, -0x237C7E, 0x32B90F, 0x8EF5A7, 0xE75614, 0x08F121, 0x2A9DB5, -0x4D7E6F, 0x5119A5, 0xABF9B5, 0xD6DF82, 0x61DD96, 0x023616, -0x9F3AC4, 0xA1A283, 0x6DED72, 0x7A8D39, 0xA9B882, 0x5C326B, -0x5B2746, 0xED3400, 0x7700D2, 0x55F4FC, 0x4D5901, 0x8071E0, -#endif - -}; - -static const double PIo2[] = { - 1.57079625129699707031e+00, /* 0x3FF921FB, 0x40000000 */ - 7.54978941586159635335e-08, /* 0x3E74442D, 0x00000000 */ - 5.39030252995776476554e-15, /* 0x3CF84698, 0x80000000 */ - 3.28200341580791294123e-22, /* 0x3B78CC51, 0x60000000 */ - 1.27065575308067607349e-29, /* 0x39F01B83, 0x80000000 */ - 1.22933308981111328932e-36, /* 0x387A2520, 0x40000000 */ - 2.73370053816464559624e-44, /* 0x36E38222, 0x80000000 */ - 2.16741683877804819444e-51, /* 0x3569F31D, 0x00000000 */ -}; - -static const double -zero = 0.0, -one = 1.0, -two24 = 1.67772160000000000000e+07, /* 0x41700000, 0x00000000 */ -twon24 = 5.96046447753906250000e-08; /* 0x3E700000, 0x00000000 */ - -int -__kernel_rem_pio2(double *x, double *y, int e0, int nx, int prec) -{ - int32_t jz,jx,jv,jp,jk,carry,n,iq[20],i,j,k,m,q0,ih; - double z,fw,f[20],fq[20],q[20]; - - /* initialize jk*/ - jk = init_jk[prec]; - jp = jk; - - /* determine jx,jv,q0, note that 3>q0 */ - jx = nx-1; - jv = (e0-3)/24; if(jv<0) jv=0; - q0 = e0-24*(jv+1); - - /* set up f[0] to f[jx+jk] where f[jx+jk] = ipio2[jv+jk] */ - j = jv-jx; m = jx+jk; - for(i=0;i<=m;i++,j++) f[i] = (j<0)? zero : (double) ipio2[j]; - - /* compute q[0],q[1],...q[jk] */ - for (i=0;i<=jk;i++) { - for(j=0,fw=0.0;j<=jx;j++) fw += x[j]*f[jx+i-j]; q[i] = fw; - } - - jz = jk; -recompute: - /* distill q[] into iq[] reversingly */ - for(i=0,j=jz,z=q[jz];j>0;i++,j--) { - fw = (double)((int32_t)(twon24* z)); - iq[i] = (int32_t)(z-two24*fw); - z = q[j-1]+fw; - } - - /* compute n */ - z = scalbn(z,q0); /* actual value of z */ - z -= 8.0*floor(z*0.125); /* trim off integer >= 8 */ - n = (int32_t) z; - z -= (double)n; - ih = 0; - if(q0>0) { /* need iq[jz-1] to determine n */ - i = (iq[jz-1]>>(24-q0)); n += i; - iq[jz-1] -= i<<(24-q0); - ih = iq[jz-1]>>(23-q0); - } - else if(q0==0) ih = iq[jz-1]>>23; - else if(z>=0.5) ih=2; - - if(ih>0) { /* q > 0.5 */ - n += 1; carry = 0; - for(i=0;i0) { /* rare case: chance is 1 in 12 */ - switch(q0) { - case 1: - iq[jz-1] &= 0x7fffff; break; - case 2: - iq[jz-1] &= 0x3fffff; break; - } - } - if(ih==2) { - z = one - z; - if(carry!=0) z -= scalbn(one,q0); - } - } - - /* check if recomputation is needed */ - if(z==zero) { - j = 0; - for (i=jz-1;i>=jk;i--) j |= iq[i]; - if(j==0) { /* need recomputation */ - for(k=1;iq[jk-k]==0;k++); /* k = no. of terms needed */ - - for(i=jz+1;i<=jz+k;i++) { /* add q[jz+1] to q[jz+k] */ - f[jx+i] = (double) ipio2[jv+i]; - for(j=0,fw=0.0;j<=jx;j++) fw += x[j]*f[jx+i-j]; - q[i] = fw; - } - jz += k; - goto recompute; - } - } - - /* chop off zero terms */ - if(z==0.0) { - jz -= 1; q0 -= 24; - while(iq[jz]==0) { jz--; q0-=24;} - } else { /* break z into 24-bit if necessary */ - z = scalbn(z,-q0); - if(z>=two24) { - fw = (double)((int32_t)(twon24*z)); - iq[jz] = (int32_t)(z-two24*fw); - jz += 1; q0 += 24; - iq[jz] = (int32_t) fw; - } else iq[jz] = (int32_t) z ; - } - - /* convert integer "bit" chunk to floating-point value */ - fw = scalbn(one,q0); - for(i=jz;i>=0;i--) { - q[i] = fw*(double)iq[i]; fw*=twon24; - } - - /* compute PIo2[0,...,jp]*q[jz,...,0] */ - for(i=jz;i>=0;i--) { - for(fw=0.0,k=0;k<=jp&&k<=jz-i;k++) fw += PIo2[k]*q[i+k]; - fq[jz-i] = fw; - } - - /* compress fq[] into y[] */ - switch(prec) { - case 0: - fw = 0.0; - for (i=jz;i>=0;i--) fw += fq[i]; - y[0] = (ih==0)? fw: -fw; - break; - case 1: - case 2: - fw = 0.0; - for (i=jz;i>=0;i--) fw += fq[i]; - STRICT_ASSIGN(double,fw,fw); - y[0] = (ih==0)? fw: -fw; - fw = fq[0]-fw; - for (i=1;i<=jz;i++) fw += fq[i]; - y[1] = (ih==0)? fw: -fw; - break; - case 3: /* painful */ - for (i=jz;i>0;i--) { - fw = fq[i-1]+fq[i]; - fq[i] += fq[i-1]-fw; - fq[i-1] = fw; - } - for (i=jz;i>1;i--) { - fw = fq[i-1]+fq[i]; - fq[i] += fq[i-1]-fw; - fq[i-1] = fw; - } - for (fw=0.0,i=jz;i>=2;i--) fw += fq[i]; - if(ih==0) { - y[0] = fq[0]; y[1] = fq[1]; y[2] = fw; - } else { - y[0] = -fq[0]; y[1] = -fq[1]; y[2] = -fw; - } - } - return n&7; -} diff --git a/modules/fdlibm/src/k_sin.cpp b/modules/fdlibm/src/k_sin.cpp deleted file mode 100644 index f45165f62e10..000000000000 --- a/modules/fdlibm/src/k_sin.cpp +++ /dev/null @@ -1,69 +0,0 @@ - -/* @(#)k_sin.c 1.3 95/01/18 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunSoft, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -//#include -//__FBSDID("$FreeBSD$"); - -/* __kernel_sin( x, y, iy) - * kernel sin function on ~[-pi/4, pi/4] (except on -0), pi/4 ~ 0.7854 - * Input x is assumed to be bounded by ~pi/4 in magnitude. - * Input y is the tail of x. - * Input iy indicates whether y is 0. (if iy=0, y assume to be 0). - * - * Algorithm - * 1. Since sin(-x) = -sin(x), we need only to consider positive x. - * 2. Callers must return sin(-0) = -0 without calling here since our - * odd polynomial is not evaluated in a way that preserves -0. - * Callers may do the optimization sin(x) ~ x for tiny x. - * 3. sin(x) is approximated by a polynomial of degree 13 on - * [0,pi/4] - * 3 13 - * sin(x) ~ x + S1*x + ... + S6*x - * where - * - * |sin(x) 2 4 6 8 10 12 | -58 - * |----- - (1+S1*x +S2*x +S3*x +S4*x +S5*x +S6*x )| <= 2 - * | x | - * - * 4. sin(x+y) = sin(x) + sin'(x')*y - * ~ sin(x) + (1-x*x/2)*y - * For better accuracy, let - * 3 2 2 2 2 - * r = x *(S2+x *(S3+x *(S4+x *(S5+x *S6)))) - * then 3 2 - * sin(x) = x + (S1*x + (x *(r-y/2)+y)) - */ - -#include "math_private.h" - -static const double -half = 5.00000000000000000000e-01, /* 0x3FE00000, 0x00000000 */ -S1 = -1.66666666666666324348e-01, /* 0xBFC55555, 0x55555549 */ -S2 = 8.33333333332248946124e-03, /* 0x3F811111, 0x1110F8A6 */ -S3 = -1.98412698298579493134e-04, /* 0xBF2A01A0, 0x19C161D5 */ -S4 = 2.75573137070700676789e-06, /* 0x3EC71DE3, 0x57B1FE7D */ -S5 = -2.50507602534068634195e-08, /* 0xBE5AE5E6, 0x8A2B9CEB */ -S6 = 1.58969099521155010221e-10; /* 0x3DE5D93A, 0x5ACFD57C */ - -double -__kernel_sin(double x, double y, int iy) -{ - double z,r,v,w; - - z = x*x; - w = z*z; - r = S2+z*(S3+z*S4) + z*w*(S5+z*S6); - v = z*x; - if(iy==0) return x+v*(S1+z*r); - else return x-((z*(half*y-v*r)-y)-v*S1); -} diff --git a/modules/fdlibm/src/k_tan.cpp b/modules/fdlibm/src/k_tan.cpp deleted file mode 100644 index de0871798352..000000000000 --- a/modules/fdlibm/src/k_tan.cpp +++ /dev/null @@ -1,131 +0,0 @@ -/* @(#)k_tan.c 1.5 04/04/22 SMI */ - -/* - * ==================================================== - * Copyright 2004 Sun Microsystems, Inc. All Rights Reserved. - * - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -/* INDENT OFF */ -//#include -//__FBSDID("$FreeBSD$"); - -/* __kernel_tan( x, y, k ) - * kernel tan function on ~[-pi/4, pi/4] (except on -0), pi/4 ~ 0.7854 - * Input x is assumed to be bounded by ~pi/4 in magnitude. - * Input y is the tail of x. - * Input k indicates whether tan (if k = 1) or -1/tan (if k = -1) is returned. - * - * Algorithm - * 1. Since tan(-x) = -tan(x), we need only to consider positive x. - * 2. Callers must return tan(-0) = -0 without calling here since our - * odd polynomial is not evaluated in a way that preserves -0. - * Callers may do the optimization tan(x) ~ x for tiny x. - * 3. tan(x) is approximated by a odd polynomial of degree 27 on - * [0,0.67434] - * 3 27 - * tan(x) ~ x + T1*x + ... + T13*x - * where - * - * |tan(x) 2 4 26 | -59.2 - * |----- - (1+T1*x +T2*x +.... +T13*x )| <= 2 - * | x | - * - * Note: tan(x+y) = tan(x) + tan'(x)*y - * ~ tan(x) + (1+x*x)*y - * Therefore, for better accuracy in computing tan(x+y), let - * 3 2 2 2 2 - * r = x *(T2+x *(T3+x *(...+x *(T12+x *T13)))) - * then - * 3 2 - * tan(x+y) = x + (T1*x + (x *(r+y)+y)) - * - * 4. For x in [0.67434,pi/4], let y = pi/4 - x, then - * tan(x) = tan(pi/4-y) = (1-tan(y))/(1+tan(y)) - * = 1 - 2*(tan(y) - (tan(y)^2)/(1+tan(y))) - */ - -#include "math_private.h" -static const double xxx[] = { - 3.33333333333334091986e-01, /* 3FD55555, 55555563 */ - 1.33333333333201242699e-01, /* 3FC11111, 1110FE7A */ - 5.39682539762260521377e-02, /* 3FABA1BA, 1BB341FE */ - 2.18694882948595424599e-02, /* 3F9664F4, 8406D637 */ - 8.86323982359930005737e-03, /* 3F8226E3, E96E8493 */ - 3.59207910759131235356e-03, /* 3F6D6D22, C9560328 */ - 1.45620945432529025516e-03, /* 3F57DBC8, FEE08315 */ - 5.88041240820264096874e-04, /* 3F4344D8, F2F26501 */ - 2.46463134818469906812e-04, /* 3F3026F7, 1A8D1068 */ - 7.81794442939557092300e-05, /* 3F147E88, A03792A6 */ - 7.14072491382608190305e-05, /* 3F12B80F, 32F0A7E9 */ - -1.85586374855275456654e-05, /* BEF375CB, DB605373 */ - 2.59073051863633712884e-05, /* 3EFB2A70, 74BF7AD4 */ -/* one */ 1.00000000000000000000e+00, /* 3FF00000, 00000000 */ -/* pio4 */ 7.85398163397448278999e-01, /* 3FE921FB, 54442D18 */ -/* pio4lo */ 3.06161699786838301793e-17 /* 3C81A626, 33145C07 */ -}; -#define one xxx[13] -#define pio4 xxx[14] -#define pio4lo xxx[15] -#define T xxx -/* INDENT ON */ - -double -__kernel_tan(double x, double y, int iy) { - double z, r, v, w, s; - int32_t ix, hx; - - GET_HIGH_WORD(hx,x); - ix = hx & 0x7fffffff; /* high word of |x| */ - if (ix >= 0x3FE59428) { /* |x| >= 0.6744 */ - if (hx < 0) { - x = -x; - y = -y; - } - z = pio4 - x; - w = pio4lo - y; - x = z + w; - y = 0.0; - } - z = x * x; - w = z * z; - /* - * Break x^5*(T[1]+x^2*T[2]+...) into - * x^5(T[1]+x^4*T[3]+...+x^20*T[11]) + - * x^5(x^2*(T[2]+x^4*T[4]+...+x^22*[T12])) - */ - r = T[1] + w * (T[3] + w * (T[5] + w * (T[7] + w * (T[9] + - w * T[11])))); - v = z * (T[2] + w * (T[4] + w * (T[6] + w * (T[8] + w * (T[10] + - w * T[12]))))); - s = z * x; - r = y + z * (s * (r + v) + y); - r += T[0] * s; - w = x + r; - if (ix >= 0x3FE59428) { - v = (double) iy; - return (double) (1 - ((hx >> 30) & 2)) * - (v - 2.0 * (x - (w * w / (w + v) - r))); - } - if (iy == 1) - return w; - else { - /* - * if allow error up to 2 ulp, simply return - * -1.0 / (x+r) here - */ - /* compute -1.0 / (x+r) accurately */ - double a, t; - z = w; - SET_LOW_WORD(z,0); - v = r - (z - x); /* z+v = r+x */ - t = a = -1.0 / w; /* a = -1.0/w */ - SET_LOW_WORD(t,0); - s = 1.0 + t * z; - return t + a * (s + t * v); - } -} diff --git a/modules/fdlibm/src/math_private.h b/modules/fdlibm/src/math_private.h index 210e39d85b30..35183bbc90d6 100644 --- a/modules/fdlibm/src/math_private.h +++ b/modules/fdlibm/src/math_private.h @@ -25,18 +25,6 @@ #include "mozilla/EndianUtils.h" -/* - * Emulate FreeBSD internal double types. - * Adapted from https://github.com/freebsd/freebsd-src/search?q=__double_t - */ - -#if defined(__i386__) -typedef long double __double_t; -#else -typedef double __double_t; -#endif -typedef __double_t double_t; - /* * The original fdlibm code used statements like: * n0 = ((*(int*)&one)>>29)^1; * index of high word * @@ -603,56 +591,11 @@ CMPLXL(long double x, long double y) #endif /* _COMPLEX_H */ -/* - * The rnint() family rounds to the nearest integer for a restricted range - * range of args (up to about 2**MANT_DIG). We assume that the current - * rounding mode is FE_TONEAREST so that this can be done efficiently. - * Extra precision causes more problems in practice, and we only centralize - * this here to reduce those problems, and have not solved the efficiency - * problems. The exp2() family uses a more delicate version of this that - * requires extracting bits from the intermediate value, so it is not - * centralized here and should copy any solution of the efficiency problems. - */ - -static inline double -rnint(__double_t x) -{ - /* - * This casts to double to kill any extra precision. This depends - * on the cast being applied to a double_t to avoid compiler bugs - * (this is a cleaner version of STRICT_ASSIGN()). This is - * inefficient if there actually is extra precision, but is hard - * to improve on. We use double_t in the API to minimise conversions - * for just calling here. Note that we cannot easily change the - * magic number to the one that works directly with double_t, since - * the rounding precision is variable at runtime on x86 so the - * magic number would need to be variable. Assuming that the - * rounding precision is always the default is too fragile. This - * and many other complications will move when the default is - * changed to FP_PE. - */ - return ((double)(x + 0x1.8p52) - 0x1.8p52); -} - -/* - * irint() and i64rint() give the same result as casting to their integer - * return type provided their arg is a floating point integer. They can - * sometimes be more efficient because no rounding is required. - */ -#if (defined(amd64) || defined(__i386__)) && defined(__GNUCLIKE_ASM) -#define irint(x) \ - (sizeof(x) == sizeof(float) && \ - sizeof(__float_t) == sizeof(long double) ? irintf(x) : \ - sizeof(x) == sizeof(double) && \ - sizeof(__double_t) == sizeof(long double) ? irintd(x) : \ - sizeof(x) == sizeof(long double) ? irintl(x) : (int)(x)) -#else -#define irint(x) ((int)(x)) -#endif - #ifdef DEBUG #if defined(__amd64__) || defined(__i386__) #define breakpoint() asm("int $3") +#elif defined(__wasi__) +#define breakpoint() __builtin_trap() #else #include @@ -849,9 +792,6 @@ rnint(__double_t x) #define asin fdlibm::asin #define atan fdlibm::atan #define atan2 fdlibm::atan2 -#define cos fdlibm::cos -#define sin fdlibm::sin -#define tan fdlibm::tan #define cosh fdlibm::cosh #define sinh fdlibm::sinh #define tanh fdlibm::tanh diff --git a/modules/fdlibm/src/moz.build b/modules/fdlibm/src/moz.build index ed50eb21e3da..603e824b9b52 100644 --- a/modules/fdlibm/src/moz.build +++ b/modules/fdlibm/src/moz.build @@ -46,18 +46,13 @@ SOURCES += [ 'e_log2.cpp', 'e_pow.cpp', 'e_sinh.cpp', - 'k_cos.cpp', 'k_exp.cpp', - 'k_rem_pio2.cpp', - 'k_sin.cpp', - 'k_tan.cpp', 's_asinh.cpp', 's_atan.cpp', 's_cbrt.cpp', 's_ceil.cpp', 's_ceilf.cpp', 's_copysign.cpp', - 's_cos.cpp', 's_expm1.cpp', 's_fabs.cpp', 's_floor.cpp', @@ -67,8 +62,6 @@ SOURCES += [ 's_rint.cpp', 's_rintf.cpp', 's_scalbn.cpp', - 's_sin.cpp', - 's_tan.cpp', 's_tanh.cpp', 's_trunc.cpp', 's_truncf.cpp', diff --git a/modules/fdlibm/src/s_cos.cpp b/modules/fdlibm/src/s_cos.cpp deleted file mode 100644 index 8c8bbfdc4c94..000000000000 --- a/modules/fdlibm/src/s_cos.cpp +++ /dev/null @@ -1,84 +0,0 @@ -/* @(#)s_cos.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -//#include -//__FBSDID("$FreeBSD$"); - -/* cos(x) - * Return cosine function of x. - * - * kernel function: - * __kernel_sin ... sine function on [-pi/4,pi/4] - * __kernel_cos ... cosine function on [-pi/4,pi/4] - * __ieee754_rem_pio2 ... argument reduction routine - * - * Method. - * Let S,C and T denote the sin, cos and tan respectively on - * [-PI/4, +PI/4]. Reduce the argument x to y1+y2 = x-k*pi/2 - * in [-pi/4 , +pi/4], and let n = k mod 4. - * We have - * - * n sin(x) cos(x) tan(x) - * ---------------------------------------------------------- - * 0 S C T - * 1 C -S -1/T - * 2 -S -C T - * 3 -C S -1/T - * ---------------------------------------------------------- - * - * Special cases: - * Let trig be any of sin, cos, or tan. - * trig(+-INF) is NaN, with signals; - * trig(NaN) is that NaN; - * - * Accuracy: - * TRIG(x) returns trig(x) nearly rounded - */ - -#include - -#define INLINE_REM_PIO2 -#include "math_private.h" -#include "e_rem_pio2.cpp" - -double -cos(double x) -{ - double y[2],z=0.0; - int32_t n, ix; - - /* High word of x. */ - GET_HIGH_WORD(ix,x); - - /* |x| ~< pi/4 */ - ix &= 0x7fffffff; - if(ix <= 0x3fe921fb) { - if(ix<0x3e46a09e) /* if x < 2**-27 * sqrt(2) */ - if(((int)x)==0) return 1.0; /* generate inexact */ - return __kernel_cos(x,z); - } - - /* cos(Inf or NaN) is NaN */ - else if (ix>=0x7ff00000) return x-x; - - /* argument reduction needed */ - else { - n = __ieee754_rem_pio2(x,y); - switch(n&3) { - case 0: return __kernel_cos(y[0],y[1]); - case 1: return -__kernel_sin(y[0],y[1],1); - case 2: return -__kernel_cos(y[0],y[1]); - default: - return __kernel_sin(y[0],y[1],1); - } - } -} diff --git a/modules/fdlibm/src/s_sin.cpp b/modules/fdlibm/src/s_sin.cpp deleted file mode 100644 index 42cec47b2cdd..000000000000 --- a/modules/fdlibm/src/s_sin.cpp +++ /dev/null @@ -1,84 +0,0 @@ -/* @(#)s_sin.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -//#include -//__FBSDID("$FreeBSD$"); - -/* sin(x) - * Return sine function of x. - * - * kernel function: - * __kernel_sin ... sine function on [-pi/4,pi/4] - * __kernel_cos ... cose function on [-pi/4,pi/4] - * __ieee754_rem_pio2 ... argument reduction routine - * - * Method. - * Let S,C and T denote the sin, cos and tan respectively on - * [-PI/4, +PI/4]. Reduce the argument x to y1+y2 = x-k*pi/2 - * in [-pi/4 , +pi/4], and let n = k mod 4. - * We have - * - * n sin(x) cos(x) tan(x) - * ---------------------------------------------------------- - * 0 S C T - * 1 C -S -1/T - * 2 -S -C T - * 3 -C S -1/T - * ---------------------------------------------------------- - * - * Special cases: - * Let trig be any of sin, cos, or tan. - * trig(+-INF) is NaN, with signals; - * trig(NaN) is that NaN; - * - * Accuracy: - * TRIG(x) returns trig(x) nearly rounded - */ - -#include - -#define INLINE_REM_PIO2 -#include "math_private.h" -#include "e_rem_pio2.cpp" - -double -sin(double x) -{ - double y[2],z=0.0; - int32_t n, ix; - - /* High word of x. */ - GET_HIGH_WORD(ix,x); - - /* |x| ~< pi/4 */ - ix &= 0x7fffffff; - if(ix <= 0x3fe921fb) { - if(ix<0x3e500000) /* |x| < 2**-26 */ - {if((int)x==0) return x;} /* generate inexact */ - return __kernel_sin(x,z,0); - } - - /* sin(Inf or NaN) is NaN */ - else if (ix>=0x7ff00000) return x-x; - - /* argument reduction needed */ - else { - n = __ieee754_rem_pio2(x,y); - switch(n&3) { - case 0: return __kernel_sin(y[0],y[1],1); - case 1: return __kernel_cos(y[0],y[1]); - case 2: return -__kernel_sin(y[0],y[1],1); - default: - return -__kernel_cos(y[0],y[1]); - } - } -} diff --git a/modules/fdlibm/src/s_tan.cpp b/modules/fdlibm/src/s_tan.cpp deleted file mode 100644 index 3bcb10976132..000000000000 --- a/modules/fdlibm/src/s_tan.cpp +++ /dev/null @@ -1,78 +0,0 @@ -/* @(#)s_tan.c 5.1 93/09/24 */ -/* - * ==================================================== - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. - * - * Developed at SunPro, a Sun Microsystems, Inc. business. - * Permission to use, copy, modify, and distribute this - * software is freely granted, provided that this notice - * is preserved. - * ==================================================== - */ - -//#include -//__FBSDID("$FreeBSD$"); - -/* tan(x) - * Return tangent function of x. - * - * kernel function: - * __kernel_tan ... tangent function on [-pi/4,pi/4] - * __ieee754_rem_pio2 ... argument reduction routine - * - * Method. - * Let S,C and T denote the sin, cos and tan respectively on - * [-PI/4, +PI/4]. Reduce the argument x to y1+y2 = x-k*pi/2 - * in [-pi/4 , +pi/4], and let n = k mod 4. - * We have - * - * n sin(x) cos(x) tan(x) - * ---------------------------------------------------------- - * 0 S C T - * 1 C -S -1/T - * 2 -S -C T - * 3 -C S -1/T - * ---------------------------------------------------------- - * - * Special cases: - * Let trig be any of sin, cos, or tan. - * trig(+-INF) is NaN, with signals; - * trig(NaN) is that NaN; - * - * Accuracy: - * TRIG(x) returns trig(x) nearly rounded - */ - -#include - -#define INLINE_REM_PIO2 -#include "math_private.h" -#include "e_rem_pio2.cpp" - -double -tan(double x) -{ - double y[2],z=0.0; - int32_t n, ix; - - /* High word of x. */ - GET_HIGH_WORD(ix,x); - - /* |x| ~< pi/4 */ - ix &= 0x7fffffff; - if(ix <= 0x3fe921fb) { - if(ix<0x3e400000) /* x < 2**-27 */ - if((int)x==0) return x; /* generate inexact */ - return __kernel_tan(x,z,1); - } - - /* tan(Inf or NaN) is NaN */ - else if (ix>=0x7ff00000) return x-x; /* NaN */ - - /* argument reduction needed */ - else { - n = __ieee754_rem_pio2(x,y); - return __kernel_tan(y[0],y[1],1-((n&1)<<1)); /* 1 -- n even - -1 -- n odd */ - } -} diff --git a/modules/fdlibm/update.sh b/modules/fdlibm/update.sh index 49ccd29fc783..90d41786263a 100755 --- a/modules/fdlibm/update.sh +++ b/modules/fdlibm/update.sh @@ -5,7 +5,7 @@ set -e -API_BASE_URL=https://api.github.com/repos/freebsd/freebsd-src +API_BASE_URL=https://api.github.com/repos/freebsd/freebsd get_commit() { curl -s "${API_BASE_URL}/commits?path=lib/msun/src&per_page=1" \ diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml index 408c34e1be87..1e05a5143e56 100644 --- a/modules/libpref/init/StaticPrefList.yaml +++ b/modules/libpref/init/StaticPrefList.yaml @@ -6150,14 +6150,6 @@ mirror: always do_not_use_directly: true -# Whether to use fdlibm for Math.sin, Math.cos, and Math.tan. When -# privacy.resistFingerprinting is true, this pref is ignored and fdlibm is used -# anyway. -- name: javascript.options.use_fdlibm_for_sin_cos_tan - type: bool - value: false - mirror: always - #--------------------------------------------------------------------------- # Prefs starting with "layers." #--------------------------------------------------------------------------- diff --git a/toolkit/components/resistfingerprinting/nsRFPService.cpp b/toolkit/components/resistfingerprinting/nsRFPService.cpp index 62b13e78acda..057a43510ed6 100644 --- a/toolkit/components/resistfingerprinting/nsRFPService.cpp +++ b/toolkit/components/resistfingerprinting/nsRFPService.cpp @@ -33,7 +33,6 @@ #include "mozilla/RefPtr.h" #include "mozilla/Services.h" #include "mozilla/StaticMutex.h" -#include "mozilla/StaticPrefs_javascript.h" #include "mozilla/StaticPrefs_privacy.h" #include "mozilla/StaticPtr.h" #include "mozilla/TextEvents.h" @@ -717,12 +716,6 @@ void nsRFPService::UpdateRFPPref() { bool privacyResistFingerprinting = StaticPrefs::privacy_resistFingerprinting(); - - // set fdlibm pref - JS::SetUseFdlibmForSinCosTan( - StaticPrefs::javascript_options_use_fdlibm_for_sin_cos_tan() || - privacyResistFingerprinting); - if (privacyResistFingerprinting) { PR_SetEnv("TZ=UTC"); } else if (sInitialized) {