tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

jsmath.h (4284B)


      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/. */
      6 
      7 #ifndef jsmath_h
      8 #define jsmath_h
      9 
     10 #include <stdint.h>
     11 
     12 #include "NamespaceImports.h"
     13 
     14 namespace js {
     15 
     16 using UnaryMathFunctionType = double (*)(double);
     17 
     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 {
     22  SinNative,
     23  SinFdlibm,
     24  CosNative,
     25  CosFdlibm,
     26  TanNative,
     27  TanFdlibm,
     28  Log,
     29  Exp,
     30  ACos,
     31  ASin,
     32  ATan,
     33  Log10,
     34  Log2,
     35  Log1P,
     36  ExpM1,
     37  CosH,
     38  SinH,
     39  TanH,
     40  ACosH,
     41  ASinH,
     42  ATanH,
     43  Trunc,
     44  Cbrt,
     45  Floor,
     46  Ceil,
     47  Round,
     48 };
     49 
     50 extern UnaryMathFunctionType GetUnaryMathFunctionPtr(UnaryMathFunction fun);
     51 extern const char* GetUnaryMathFunctionName(UnaryMathFunction fun,
     52                                            bool enumName = false);
     53 
     54 /*
     55 * JS math functions.
     56 */
     57 
     58 extern const JSClass MathClass;
     59 
     60 extern uint64_t GenerateRandomSeed();
     61 
     62 // Fill |seed[0]| and |seed[1]| with random bits, suitable for
     63 // seeding a XorShift128+ random number generator.
     64 extern void GenerateXorShift128PlusSeed(mozilla::Array<uint64_t, 2>& seed);
     65 
     66 extern double math_random_impl(JSContext* cx);
     67 
     68 extern double math_abs_impl(double x);
     69 
     70 extern bool math_abs(JSContext* cx, unsigned argc, js::Value* vp);
     71 
     72 extern double math_max_impl(double x, double y);
     73 
     74 extern bool math_max(JSContext* cx, unsigned argc, js::Value* vp);
     75 
     76 extern double math_min_impl(double x, double y);
     77 
     78 extern bool math_min(JSContext* cx, unsigned argc, js::Value* vp);
     79 
     80 extern double math_sqrt_impl(double x);
     81 
     82 extern bool math_imul_handle(JSContext* cx, HandleValue lhs, HandleValue rhs,
     83                             MutableHandleValue res);
     84 
     85 extern bool RoundFloat32(JSContext* cx, HandleValue v, float* out);
     86 
     87 extern bool RoundFloat32(JSContext* cx, HandleValue arg,
     88                         MutableHandleValue res);
     89 
     90 extern double RoundFloat32(double d);
     91 
     92 extern double RoundFloat16(double d);
     93 
     94 extern double math_log_impl(double x);
     95 
     96 extern bool math_use_fdlibm_for_sin_cos_tan();
     97 
     98 extern double math_sin_fdlibm_impl(double x);
     99 extern double math_sin_native_impl(double x);
    100 
    101 extern double math_cos_fdlibm_impl(double x);
    102 extern double math_cos_native_impl(double x);
    103 
    104 extern double math_exp_impl(double x);
    105 
    106 extern double math_tan_fdlibm_impl(double x);
    107 extern double math_tan_native_impl(double x);
    108 
    109 extern double ecmaHypot(double x, double y);
    110 
    111 extern double hypot3(double x, double y, double z);
    112 
    113 extern double hypot4(double x, double y, double z, double w);
    114 
    115 extern bool math_hypot_handle(JSContext* cx, HandleValueArray args,
    116                              MutableHandleValue res);
    117 
    118 extern bool math_trunc(JSContext* cx, unsigned argc, Value* vp);
    119 
    120 extern double ecmaAtan2(double x, double y);
    121 
    122 extern double math_atan_impl(double x);
    123 
    124 extern double math_asin_impl(double x);
    125 
    126 extern double math_acos_impl(double x);
    127 
    128 extern double math_ceil_impl(double x);
    129 
    130 extern bool math_floor(JSContext* cx, unsigned argc, Value* vp);
    131 
    132 extern double math_floor_impl(double x);
    133 
    134 template <typename T>
    135 extern T GetBiggestNumberLessThan(T x);
    136 
    137 extern double math_round_impl(double x);
    138 
    139 extern float math_roundf_impl(float x);
    140 
    141 extern double powi(double x, int32_t y);
    142 
    143 extern double ecmaPow(double x, double y);
    144 
    145 extern double math_log10_impl(double x);
    146 
    147 extern double math_log2_impl(double x);
    148 
    149 extern double math_log1p_impl(double x);
    150 
    151 extern double math_expm1_impl(double x);
    152 
    153 extern double math_cosh_impl(double x);
    154 
    155 extern double math_sinh_impl(double x);
    156 
    157 extern double math_tanh_impl(double x);
    158 
    159 extern double math_acosh_impl(double x);
    160 
    161 extern double math_asinh_impl(double x);
    162 
    163 extern double math_atanh_impl(double x);
    164 
    165 extern double math_trunc_impl(double x);
    166 
    167 extern bool math_sign(JSContext* cx, unsigned argc, Value* vp);
    168 
    169 extern double math_sign_impl(double x);
    170 
    171 extern double math_cbrt_impl(double x);
    172 
    173 } /* namespace js */
    174 
    175 #endif /* jsmath_h */