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

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

Issue 1828253002: [builtins] Provide Math.floor as TurboFan builtin. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: REBASE. Address feedback. Created 4 years, 8 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/js/i18n.js ('k') | src/runtime/runtime.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 23 matching lines...) Expand all
34 // The naming of y and x matches the spec, as does the order in which 34 // The naming of y and x matches the spec, as does the order in which
35 // ToNumber (valueOf) is called. 35 // ToNumber (valueOf) is called.
36 function MathAtan2JS(y, x) { 36 function MathAtan2JS(y, x) {
37 y = +y; 37 y = +y;
38 x = +x; 38 x = +x;
39 return %MathAtan2(y, x); 39 return %MathAtan2(y, x);
40 } 40 }
41 41
42 // ECMA 262 - 15.8.2.6 42 // ECMA 262 - 15.8.2.6
43 function MathCeil(x) { 43 function MathCeil(x) {
44 return -%_MathFloor(-x); 44 return -%math_floor(-x);
45 } 45 }
46 46
47 // ECMA 262 - 15.8.2.8 47 // ECMA 262 - 15.8.2.8
48 function MathExp(x) { 48 function MathExp(x) {
49 return %MathExpRT(TO_NUMBER(x)); 49 return %MathExpRT(TO_NUMBER(x));
50 } 50 }
51 51
52 // ECMA 262 - 15.8.2.9
53 function MathFloorJS(x) {
54 return %_MathFloor(+x);
55 }
56
57 // ECMA 262 - 15.8.2.10 52 // ECMA 262 - 15.8.2.10
58 function MathLog(x) { 53 function MathLog(x) {
59 return %_MathLogRT(TO_NUMBER(x)); 54 return %_MathLogRT(TO_NUMBER(x));
60 } 55 }
61 56
62 // ECMA 262 - 15.8.2.13 57 // ECMA 262 - 15.8.2.13
63 function MathPowJS(x, y) { 58 function MathPowJS(x, y) {
64 return %_MathPow(TO_NUMBER(x), TO_NUMBER(y)); 59 return %_MathPow(TO_NUMBER(x), TO_NUMBER(y));
65 } 60 }
66 61
(...skipping 29 matching lines...) Expand all
96 x = +x; 91 x = +x;
97 if (x > 0) return 1; 92 if (x > 0) return 1;
98 if (x < 0) return -1; 93 if (x < 0) return -1;
99 // -0, 0 or NaN. 94 // -0, 0 or NaN.
100 return x; 95 return x;
101 } 96 }
102 97
103 // ES6 draft 09-27-13, section 20.2.2.34. 98 // ES6 draft 09-27-13, section 20.2.2.34.
104 function MathTrunc(x) { 99 function MathTrunc(x) {
105 x = +x; 100 x = +x;
106 if (x > 0) return %_MathFloor(x); 101 if (x > 0) return %math_floor(x);
107 if (x < 0) return -%_MathFloor(-x); 102 if (x < 0) return -%math_floor(-x);
108 // -0, 0 or NaN. 103 // -0, 0 or NaN.
109 return x; 104 return x;
110 } 105 }
111 106
112 // ES6 draft 09-27-13, section 20.2.2.5. 107 // ES6 draft 09-27-13, section 20.2.2.5.
113 function MathAsinh(x) { 108 function MathAsinh(x) {
114 x = TO_NUMBER(x); 109 x = TO_NUMBER(x);
115 // Idempotent for NaN, +/-0 and +/-Infinity. 110 // Idempotent for NaN, +/-0 and +/-Infinity.
116 if (x === 0 || !NUMBER_IS_FINITE(x)) return x; 111 if (x === 0 || !NUMBER_IS_FINITE(x)) return x;
117 if (x > 0) return MathLog(x + %math_sqrt(x * x + 1)); 112 if (x > 0) return MathLog(x + %math_sqrt(x * x + 1));
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
180 x = TO_NUMBER(x); 175 x = TO_NUMBER(x);
181 if (x == 0 || !NUMBER_IS_FINITE(x)) return x; 176 if (x == 0 || !NUMBER_IS_FINITE(x)) return x;
182 return x >= 0 ? CubeRoot(x) : -CubeRoot(-x); 177 return x >= 0 ? CubeRoot(x) : -CubeRoot(-x);
183 } 178 }
184 179
185 macro NEWTON_ITERATION_CBRT(x, approx) 180 macro NEWTON_ITERATION_CBRT(x, approx)
186 (1.0 / 3.0) * (x / (approx * approx) + 2 * approx); 181 (1.0 / 3.0) * (x / (approx * approx) + 2 * approx);
187 endmacro 182 endmacro
188 183
189 function CubeRoot(x) { 184 function CubeRoot(x) {
190 var approx_hi = MathFloorJS(%_DoubleHi(x) / 3) + 0x2A9F7893; 185 var approx_hi = %math_floor(%_DoubleHi(x) / 3) + 0x2A9F7893;
191 var approx = %_ConstructDouble(approx_hi | 0, 0); 186 var approx = %_ConstructDouble(approx_hi | 0, 0);
192 approx = NEWTON_ITERATION_CBRT(x, approx); 187 approx = NEWTON_ITERATION_CBRT(x, approx);
193 approx = NEWTON_ITERATION_CBRT(x, approx); 188 approx = NEWTON_ITERATION_CBRT(x, approx);
194 approx = NEWTON_ITERATION_CBRT(x, approx); 189 approx = NEWTON_ITERATION_CBRT(x, approx);
195 return NEWTON_ITERATION_CBRT(x, approx); 190 return NEWTON_ITERATION_CBRT(x, approx);
196 } 191 }
197 192
198 // ------------------------------------------------------------------- 193 // -------------------------------------------------------------------
199 194
200 %InstallToContext([ 195 %InstallToContext([
(...skipping 18 matching lines...) Expand all
219 "SQRT2", 1.4142135623730951 214 "SQRT2", 1.4142135623730951
220 ]); 215 ]);
221 216
222 // Set up non-enumerable functions of the Math object and 217 // Set up non-enumerable functions of the Math object and
223 // set their names. 218 // set their names.
224 utils.InstallFunctions(GlobalMath, DONT_ENUM, [ 219 utils.InstallFunctions(GlobalMath, DONT_ENUM, [
225 "random", MathRandom, 220 "random", MathRandom,
226 "abs", MathAbs, 221 "abs", MathAbs,
227 "ceil", MathCeil, 222 "ceil", MathCeil,
228 "exp", MathExp, 223 "exp", MathExp,
229 "floor", MathFloorJS,
230 "log", MathLog, 224 "log", MathLog,
231 "round", MathRound, 225 "round", MathRound,
232 "atan2", MathAtan2JS, 226 "atan2", MathAtan2JS,
233 "pow", MathPowJS, 227 "pow", MathPowJS,
234 "sign", MathSign, 228 "sign", MathSign,
235 "trunc", MathTrunc, 229 "trunc", MathTrunc,
236 "asinh", MathAsinh, 230 "asinh", MathAsinh,
237 "acosh", MathAcosh, 231 "acosh", MathAcosh,
238 "atanh", MathAtanh, 232 "atanh", MathAtanh,
239 "hypot", MathHypot, 233 "hypot", MathHypot,
240 "clz32", MathClz32JS, 234 "clz32", MathClz32JS,
241 "cbrt", MathCbrt 235 "cbrt", MathCbrt
242 ]); 236 ]);
243 237
244 %SetForceInlineFlag(MathAbs); 238 %SetForceInlineFlag(MathAbs);
245 %SetForceInlineFlag(MathAtan2JS); 239 %SetForceInlineFlag(MathAtan2JS);
246 %SetForceInlineFlag(MathCeil); 240 %SetForceInlineFlag(MathCeil);
247 %SetForceInlineFlag(MathClz32JS); 241 %SetForceInlineFlag(MathClz32JS);
248 %SetForceInlineFlag(MathFloorJS);
249 %SetForceInlineFlag(MathRandom); 242 %SetForceInlineFlag(MathRandom);
250 %SetForceInlineFlag(MathSign); 243 %SetForceInlineFlag(MathSign);
251 %SetForceInlineFlag(MathTrunc); 244 %SetForceInlineFlag(MathTrunc);
252 245
253 // ------------------------------------------------------------------- 246 // -------------------------------------------------------------------
254 // Exports 247 // Exports
255 248
256 utils.Export(function(to) { 249 utils.Export(function(to) {
257 to.MathAbs = MathAbs; 250 to.MathAbs = MathAbs;
258 to.MathExp = MathExp; 251 to.MathExp = MathExp;
259 to.MathFloor = MathFloorJS;
260 to.IntRandom = MathRandomRaw; 252 to.IntRandom = MathRandomRaw;
261 }); 253 });
262 254
263 }) 255 })
OLDNEW
« no previous file with comments | « src/js/i18n.js ('k') | src/runtime/runtime.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698