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

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

Issue 1824993002: [builtins] Add support for JS builtins written in TurboFan. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Address comments Created 4 years, 9 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
« no previous file with comments | « src/frames.cc ('k') | src/objects.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 nextRandomIndex = randomNumbers.length; 84 nextRandomIndex = randomNumbers.length;
85 } 85 }
86 return %_DoubleLo(randomNumbers[--nextRandomIndex]) & 0x3FFFFFFF; 86 return %_DoubleLo(randomNumbers[--nextRandomIndex]) & 0x3FFFFFFF;
87 } 87 }
88 88
89 // ECMA 262 - 15.8.2.15 89 // ECMA 262 - 15.8.2.15
90 function MathRound(x) { 90 function MathRound(x) {
91 return %RoundNumber(TO_NUMBER(x)); 91 return %RoundNumber(TO_NUMBER(x));
92 } 92 }
93 93
94 // ECMA 262 - 15.8.2.17
95 function MathSqrtJS(x) {
96 return %_MathSqrt(+x);
97 }
98
99 // ES6 draft 09-27-13, section 20.2.2.28. 94 // ES6 draft 09-27-13, section 20.2.2.28.
100 function MathSign(x) { 95 function MathSign(x) {
101 x = +x; 96 x = +x;
102 if (x > 0) return 1; 97 if (x > 0) return 1;
103 if (x < 0) return -1; 98 if (x < 0) return -1;
104 // -0, 0 or NaN. 99 // -0, 0 or NaN.
105 return x; 100 return x;
106 } 101 }
107 102
108 // ES6 draft 09-27-13, section 20.2.2.34. 103 // ES6 draft 09-27-13, section 20.2.2.34.
109 function MathTrunc(x) { 104 function MathTrunc(x) {
110 x = +x; 105 x = +x;
111 if (x > 0) return %_MathFloor(x); 106 if (x > 0) return %_MathFloor(x);
112 if (x < 0) return -%_MathFloor(-x); 107 if (x < 0) return -%_MathFloor(-x);
113 // -0, 0 or NaN. 108 // -0, 0 or NaN.
114 return x; 109 return x;
115 } 110 }
116 111
117 // ES6 draft 09-27-13, section 20.2.2.5. 112 // ES6 draft 09-27-13, section 20.2.2.5.
118 function MathAsinh(x) { 113 function MathAsinh(x) {
119 x = TO_NUMBER(x); 114 x = TO_NUMBER(x);
120 // Idempotent for NaN, +/-0 and +/-Infinity. 115 // Idempotent for NaN, +/-0 and +/-Infinity.
121 if (x === 0 || !NUMBER_IS_FINITE(x)) return x; 116 if (x === 0 || !NUMBER_IS_FINITE(x)) return x;
122 if (x > 0) return MathLog(x + %_MathSqrt(x * x + 1)); 117 if (x > 0) return MathLog(x + %math_sqrt(x * x + 1));
123 // This is to prevent numerical errors caused by large negative x. 118 // This is to prevent numerical errors caused by large negative x.
124 return -MathLog(-x + %_MathSqrt(x * x + 1)); 119 return -MathLog(-x + %math_sqrt(x * x + 1));
125 } 120 }
126 121
127 // ES6 draft 09-27-13, section 20.2.2.3. 122 // ES6 draft 09-27-13, section 20.2.2.3.
128 function MathAcosh(x) { 123 function MathAcosh(x) {
129 x = TO_NUMBER(x); 124 x = TO_NUMBER(x);
130 if (x < 1) return NaN; 125 if (x < 1) return NaN;
131 // Idempotent for NaN and +Infinity. 126 // Idempotent for NaN and +Infinity.
132 if (!NUMBER_IS_FINITE(x)) return x; 127 if (!NUMBER_IS_FINITE(x)) return x;
133 return MathLog(x + %_MathSqrt(x + 1) * %_MathSqrt(x - 1)); 128 return MathLog(x + %math_sqrt(x + 1) * %math_sqrt(x - 1));
134 } 129 }
135 130
136 // ES6 draft 09-27-13, section 20.2.2.7. 131 // ES6 draft 09-27-13, section 20.2.2.7.
137 function MathAtanh(x) { 132 function MathAtanh(x) {
138 x = TO_NUMBER(x); 133 x = TO_NUMBER(x);
139 // Idempotent for +/-0. 134 // Idempotent for +/-0.
140 if (x === 0) return x; 135 if (x === 0) return x;
141 // Returns NaN for NaN and +/- Infinity. 136 // Returns NaN for NaN and +/- Infinity.
142 if (!NUMBER_IS_FINITE(x)) return NaN; 137 if (!NUMBER_IS_FINITE(x)) return NaN;
143 return 0.5 * MathLog((1 + x) / (1 - x)); 138 return 0.5 * MathLog((1 + x) / (1 - x));
(...skipping 18 matching lines...) Expand all
162 if (max === 0) max = 1; 157 if (max === 0) max = 1;
163 var sum = 0; 158 var sum = 0;
164 var compensation = 0; 159 var compensation = 0;
165 for (var i = 0; i < length; i++) { 160 for (var i = 0; i < length; i++) {
166 var n = arguments[i] / max; 161 var n = arguments[i] / max;
167 var summand = n * n - compensation; 162 var summand = n * n - compensation;
168 var preliminary = sum + summand; 163 var preliminary = sum + summand;
169 compensation = (preliminary - sum) - summand; 164 compensation = (preliminary - sum) - summand;
170 sum = preliminary; 165 sum = preliminary;
171 } 166 }
172 return %_MathSqrt(sum) * max; 167 return %math_sqrt(sum) * max;
173 } 168 }
174 169
175 // ES6 draft 07-18-14, section 20.2.2.11 170 // ES6 draft 07-18-14, section 20.2.2.11
176 function MathClz32JS(x) { 171 function MathClz32JS(x) {
177 return %_MathClz32(x >>> 0); 172 return %_MathClz32(x >>> 0);
178 } 173 }
179 174
180 // ES6 draft 09-27-13, section 20.2.2.9. 175 // ES6 draft 09-27-13, section 20.2.2.9.
181 // Cube root approximation, refer to: http://metamerist.com/cbrt/cbrt.htm 176 // Cube root approximation, refer to: http://metamerist.com/cbrt/cbrt.htm
182 // Using initial approximation adapted from Kahan's cbrt and 4 iterations 177 // Using initial approximation adapted from Kahan's cbrt and 4 iterations
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
227 // Set up non-enumerable functions of the Math object and 222 // Set up non-enumerable functions of the Math object and
228 // set their names. 223 // set their names.
229 utils.InstallFunctions(GlobalMath, DONT_ENUM, [ 224 utils.InstallFunctions(GlobalMath, DONT_ENUM, [
230 "random", MathRandom, 225 "random", MathRandom,
231 "abs", MathAbs, 226 "abs", MathAbs,
232 "ceil", MathCeil, 227 "ceil", MathCeil,
233 "exp", MathExp, 228 "exp", MathExp,
234 "floor", MathFloorJS, 229 "floor", MathFloorJS,
235 "log", MathLog, 230 "log", MathLog,
236 "round", MathRound, 231 "round", MathRound,
237 "sqrt", MathSqrtJS,
238 "atan2", MathAtan2JS, 232 "atan2", MathAtan2JS,
239 "pow", MathPowJS, 233 "pow", MathPowJS,
240 "sign", MathSign, 234 "sign", MathSign,
241 "trunc", MathTrunc, 235 "trunc", MathTrunc,
242 "asinh", MathAsinh, 236 "asinh", MathAsinh,
243 "acosh", MathAcosh, 237 "acosh", MathAcosh,
244 "atanh", MathAtanh, 238 "atanh", MathAtanh,
245 "hypot", MathHypot, 239 "hypot", MathHypot,
246 "clz32", MathClz32JS, 240 "clz32", MathClz32JS,
247 "cbrt", MathCbrt 241 "cbrt", MathCbrt
248 ]); 242 ]);
249 243
250 %SetForceInlineFlag(MathAbs); 244 %SetForceInlineFlag(MathAbs);
251 %SetForceInlineFlag(MathAtan2JS); 245 %SetForceInlineFlag(MathAtan2JS);
252 %SetForceInlineFlag(MathCeil); 246 %SetForceInlineFlag(MathCeil);
253 %SetForceInlineFlag(MathClz32JS); 247 %SetForceInlineFlag(MathClz32JS);
254 %SetForceInlineFlag(MathFloorJS); 248 %SetForceInlineFlag(MathFloorJS);
255 %SetForceInlineFlag(MathRandom); 249 %SetForceInlineFlag(MathRandom);
256 %SetForceInlineFlag(MathSign); 250 %SetForceInlineFlag(MathSign);
257 %SetForceInlineFlag(MathSqrtJS);
258 %SetForceInlineFlag(MathTrunc); 251 %SetForceInlineFlag(MathTrunc);
259 252
260 // ------------------------------------------------------------------- 253 // -------------------------------------------------------------------
261 // Exports 254 // Exports
262 255
263 utils.Export(function(to) { 256 utils.Export(function(to) {
264 to.MathAbs = MathAbs; 257 to.MathAbs = MathAbs;
265 to.MathExp = MathExp; 258 to.MathExp = MathExp;
266 to.MathFloor = MathFloorJS; 259 to.MathFloor = MathFloorJS;
267 to.IntRandom = MathRandomRaw; 260 to.IntRandom = MathRandomRaw;
268 }); 261 });
269 262
270 }) 263 })
OLDNEW
« no previous file with comments | « src/frames.cc ('k') | src/objects.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698