Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(371)

Side by Side Diff: src/js/math.js

Issue 2029413005: [builtins] Migrate Math.log to TurboFan. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix typo. Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 (function(global, utils) { 5 (function(global, utils) {
6 "use strict"; 6 "use strict";
7 7
8 %CheckIsBootstrapping(); 8 %CheckIsBootstrapping();
9 9
10 // ------------------------------------------------------------------- 10 // -------------------------------------------------------------------
(...skipping 25 matching lines...) Expand all
36 y = +y; 36 y = +y;
37 x = +x; 37 x = +x;
38 return %MathAtan2(y, x); 38 return %MathAtan2(y, x);
39 } 39 }
40 40
41 // ECMA 262 - 15.8.2.8 41 // ECMA 262 - 15.8.2.8
42 function MathExp(x) { 42 function MathExp(x) {
43 return %MathExpRT(TO_NUMBER(x)); 43 return %MathExpRT(TO_NUMBER(x));
44 } 44 }
45 45
46 // ECMA 262 - 15.8.2.10
47 function MathLog(x) {
48 return %_MathLogRT(TO_NUMBER(x));
49 }
50
51 // ECMA 262 - 15.8.2.13 46 // ECMA 262 - 15.8.2.13
52 function MathPowJS(x, y) { 47 function MathPowJS(x, y) {
53 return %_MathPow(TO_NUMBER(x), TO_NUMBER(y)); 48 return %_MathPow(TO_NUMBER(x), TO_NUMBER(y));
54 } 49 }
55 50
56 // ECMA 262 - 15.8.2.14 51 // ECMA 262 - 15.8.2.14
57 function MathRandom() { 52 function MathRandom() {
58 // While creating a startup snapshot, %GenerateRandomNumbers returns a 53 // While creating a startup snapshot, %GenerateRandomNumbers returns a
59 // normal array containing a single random number, and has to be called for 54 // normal array containing a single random number, and has to be called for
60 // every new random number. 55 // every new random number.
(...skipping 25 matching lines...) Expand all
86 if (x < 0) return -1; 81 if (x < 0) return -1;
87 // -0, 0 or NaN. 82 // -0, 0 or NaN.
88 return x; 83 return x;
89 } 84 }
90 85
91 // ES6 draft 09-27-13, section 20.2.2.5. 86 // ES6 draft 09-27-13, section 20.2.2.5.
92 function MathAsinh(x) { 87 function MathAsinh(x) {
93 x = TO_NUMBER(x); 88 x = TO_NUMBER(x);
94 // Idempotent for NaN, +/-0 and +/-Infinity. 89 // Idempotent for NaN, +/-0 and +/-Infinity.
95 if (x === 0 || !NUMBER_IS_FINITE(x)) return x; 90 if (x === 0 || !NUMBER_IS_FINITE(x)) return x;
96 if (x > 0) return MathLog(x + %math_sqrt(x * x + 1)); 91 if (x > 0) return %math_log(x + %math_sqrt(x * x + 1));
97 // This is to prevent numerical errors caused by large negative x. 92 // This is to prevent numerical errors caused by large negative x.
98 return -MathLog(-x + %math_sqrt(x * x + 1)); 93 return -%math_log(-x + %math_sqrt(x * x + 1));
99 } 94 }
100 95
101 // ES6 draft 09-27-13, section 20.2.2.3. 96 // ES6 draft 09-27-13, section 20.2.2.3.
102 function MathAcosh(x) { 97 function MathAcosh(x) {
103 x = TO_NUMBER(x); 98 x = TO_NUMBER(x);
104 if (x < 1) return NaN; 99 if (x < 1) return NaN;
105 // Idempotent for NaN and +Infinity. 100 // Idempotent for NaN and +Infinity.
106 if (!NUMBER_IS_FINITE(x)) return x; 101 if (!NUMBER_IS_FINITE(x)) return x;
107 return MathLog(x + %math_sqrt(x + 1) * %math_sqrt(x - 1)); 102 return %math_log(x + %math_sqrt(x + 1) * %math_sqrt(x - 1));
108 } 103 }
109 104
110 // ES6 draft 09-27-13, section 20.2.2.7. 105 // ES6 draft 09-27-13, section 20.2.2.7.
111 function MathAtanh(x) { 106 function MathAtanh(x) {
112 x = TO_NUMBER(x); 107 x = TO_NUMBER(x);
113 // Idempotent for +/-0. 108 // Idempotent for +/-0.
114 if (x === 0) return x; 109 if (x === 0) return x;
115 // Returns NaN for NaN and +/- Infinity. 110 // Returns NaN for NaN and +/- Infinity.
116 if (!NUMBER_IS_FINITE(x)) return NaN; 111 if (!NUMBER_IS_FINITE(x)) return NaN;
117 return 0.5 * MathLog((1 + x) / (1 - x)); 112 return 0.5 * %math_log((1 + x) / (1 - x));
118 } 113 }
119 114
120 // ES6 draft 09-27-13, section 20.2.2.17. 115 // ES6 draft 09-27-13, section 20.2.2.17.
121 function MathHypot(x, y) { // Function length is 2. 116 function MathHypot(x, y) { // Function length is 2.
122 // We may want to introduce fast paths for two arguments and when 117 // We may want to introduce fast paths for two arguments and when
123 // normalization to avoid overflow is not necessary. For now, we 118 // normalization to avoid overflow is not necessary. For now, we
124 // simply assume the general case. 119 // simply assume the general case.
125 var length = arguments.length; 120 var length = arguments.length;
126 var max = 0; 121 var max = 0;
127 for (var i = 0; i < length; i++) { 122 for (var i = 0; i < length; i++) {
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
192 "SQRT1_2", 0.7071067811865476, 187 "SQRT1_2", 0.7071067811865476,
193 "SQRT2", 1.4142135623730951 188 "SQRT2", 1.4142135623730951
194 ]); 189 ]);
195 190
196 // Set up non-enumerable functions of the Math object and 191 // Set up non-enumerable functions of the Math object and
197 // set their names. 192 // set their names.
198 utils.InstallFunctions(GlobalMath, DONT_ENUM, [ 193 utils.InstallFunctions(GlobalMath, DONT_ENUM, [
199 "random", MathRandom, 194 "random", MathRandom,
200 "abs", MathAbs, 195 "abs", MathAbs,
201 "exp", MathExp, 196 "exp", MathExp,
202 "log", MathLog,
203 "atan2", MathAtan2JS, 197 "atan2", MathAtan2JS,
204 "pow", MathPowJS, 198 "pow", MathPowJS,
205 "sign", MathSign, 199 "sign", MathSign,
206 "asinh", MathAsinh, 200 "asinh", MathAsinh,
207 "acosh", MathAcosh, 201 "acosh", MathAcosh,
208 "atanh", MathAtanh, 202 "atanh", MathAtanh,
209 "hypot", MathHypot, 203 "hypot", MathHypot,
210 "cbrt", MathCbrt 204 "cbrt", MathCbrt
211 ]); 205 ]);
212 206
213 %SetForceInlineFlag(MathAbs); 207 %SetForceInlineFlag(MathAbs);
214 %SetForceInlineFlag(MathAtan2JS); 208 %SetForceInlineFlag(MathAtan2JS);
215 %SetForceInlineFlag(MathRandom); 209 %SetForceInlineFlag(MathRandom);
216 %SetForceInlineFlag(MathSign); 210 %SetForceInlineFlag(MathSign);
217 211
218 // ------------------------------------------------------------------- 212 // -------------------------------------------------------------------
219 // Exports 213 // Exports
220 214
221 utils.Export(function(to) { 215 utils.Export(function(to) {
222 to.MathAbs = MathAbs; 216 to.MathAbs = MathAbs;
223 to.MathExp = MathExp; 217 to.MathExp = MathExp;
224 to.IntRandom = MathRandomRaw; 218 to.IntRandom = MathRandomRaw;
225 }); 219 });
226 220
227 }) 221 })
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698