1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2 * vim: set ts=8 sts=2 et sw=2 tw=80:
3 * This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
12 #include "NamespaceImports.h"
16 using UnaryMathFunctionType
= double (*)(double);
18 // Used for inlining calls to double => double Math functions from JIT code.
19 // Note that this list does not include all unary Math functions: abs and sqrt
20 // for example are missing because the JITs optimize them without a C++ call.
21 enum class UnaryMathFunction
: uint8_t {
50 extern UnaryMathFunctionType
GetUnaryMathFunctionPtr(UnaryMathFunction fun
);
51 extern const char* GetUnaryMathFunctionName(UnaryMathFunction fun
);
57 extern const JSClass MathClass
;
59 extern uint64_t GenerateRandomSeed();
61 // Fill |seed[0]| and |seed[1]| with random bits, suitable for
62 // seeding a XorShift128+ random number generator.
63 extern void GenerateXorShift128PlusSeed(mozilla::Array
<uint64_t, 2>& seed
);
65 extern double math_random_impl(JSContext
* cx
);
67 extern double math_abs_impl(double x
);
69 extern bool math_abs(JSContext
* cx
, unsigned argc
, js::Value
* vp
);
71 extern double math_max_impl(double x
, double y
);
73 extern bool math_max(JSContext
* cx
, unsigned argc
, js::Value
* vp
);
75 extern double math_min_impl(double x
, double y
);
77 extern bool math_min(JSContext
* cx
, unsigned argc
, js::Value
* vp
);
79 extern double math_sqrt_impl(double x
);
81 extern bool math_imul_handle(JSContext
* cx
, HandleValue lhs
, HandleValue rhs
,
82 MutableHandleValue res
);
84 extern bool RoundFloat32(JSContext
* cx
, HandleValue v
, float* out
);
86 extern bool RoundFloat32(JSContext
* cx
, HandleValue arg
,
87 MutableHandleValue res
);
89 extern double RoundFloat32(double d
);
91 extern double math_log_impl(double x
);
93 extern bool math_use_fdlibm_for_sin_cos_tan();
95 extern double math_sin_fdlibm_impl(double x
);
96 extern double math_sin_native_impl(double x
);
98 extern double math_cos_fdlibm_impl(double x
);
99 extern double math_cos_native_impl(double x
);
101 extern double math_exp_impl(double x
);
103 extern double math_tan_fdlibm_impl(double x
);
104 extern double math_tan_native_impl(double x
);
106 extern double ecmaHypot(double x
, double y
);
108 extern double hypot3(double x
, double y
, double z
);
110 extern double hypot4(double x
, double y
, double z
, double w
);
112 extern bool math_hypot_handle(JSContext
* cx
, HandleValueArray args
,
113 MutableHandleValue res
);
115 extern bool math_trunc(JSContext
* cx
, unsigned argc
, Value
* vp
);
117 extern double ecmaAtan2(double x
, double y
);
119 extern double math_atan_impl(double x
);
121 extern double math_asin_impl(double x
);
123 extern double math_acos_impl(double x
);
125 extern double math_ceil_impl(double x
);
127 extern bool math_floor(JSContext
* cx
, unsigned argc
, Value
* vp
);
129 extern double math_floor_impl(double x
);
131 template <typename T
>
132 extern T
GetBiggestNumberLessThan(T x
);
134 extern double math_round_impl(double x
);
136 extern float math_roundf_impl(float x
);
138 extern double powi(double x
, int32_t y
);
140 extern double ecmaPow(double x
, double y
);
142 extern double math_log10_impl(double x
);
144 extern double math_log2_impl(double x
);
146 extern double math_log1p_impl(double x
);
148 extern double math_expm1_impl(double x
);
150 extern double math_cosh_impl(double x
);
152 extern double math_sinh_impl(double x
);
154 extern double math_tanh_impl(double x
);
156 extern double math_acosh_impl(double x
);
158 extern double math_asinh_impl(double x
);
160 extern double math_atanh_impl(double x
);
162 extern double math_trunc_impl(double x
);
164 extern float math_truncf_impl(float x
);
166 extern double math_sign_impl(double x
);
168 extern double math_cbrt_impl(double x
);
172 #endif /* jsmath_h */