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

Side by Side Diff: src/math.js

Issue 1021183002: [turbofan] Turn Math.clz32 into an inlinable builtin. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 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/ia32/macro-assembler-ia32.cc ('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 var rngstate; // Initialized to a Uint32Array during genesis. 5 var rngstate; // Initialized to a Uint32Array during genesis.
6 6
7 var $abs; 7 var $abs;
8 var $exp; 8 var $exp;
9 var $floor; 9 var $floor;
10 var $max; 10 var $max;
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 } 245 }
246 return %_MathSqrt(sum) * max; 246 return %_MathSqrt(sum) * max;
247 } 247 }
248 248
249 // ES6 draft 09-27-13, section 20.2.2.16. 249 // ES6 draft 09-27-13, section 20.2.2.16.
250 function MathFroundJS(x) { 250 function MathFroundJS(x) {
251 return %MathFround(TO_NUMBER_INLINE(x)); 251 return %MathFround(TO_NUMBER_INLINE(x));
252 } 252 }
253 253
254 // ES6 draft 07-18-14, section 20.2.2.11 254 // ES6 draft 07-18-14, section 20.2.2.11
255 function MathClz32(x) { 255 function MathClz32JS(x) {
256 x = ToUint32(TO_NUMBER_INLINE(x)); 256 return %_MathClz32(x >>> 0);
257 if (x == 0) return 32;
258 var result = 0;
259 // Binary search.
260 if ((x & 0xFFFF0000) === 0) { x <<= 16; result += 16; };
261 if ((x & 0xFF000000) === 0) { x <<= 8; result += 8; };
262 if ((x & 0xF0000000) === 0) { x <<= 4; result += 4; };
263 if ((x & 0xC0000000) === 0) { x <<= 2; result += 2; };
264 if ((x & 0x80000000) === 0) { x <<= 1; result += 1; };
265 return result;
266 } 257 }
267 258
268 // ES6 draft 09-27-13, section 20.2.2.9. 259 // ES6 draft 09-27-13, section 20.2.2.9.
269 // Cube root approximation, refer to: http://metamerist.com/cbrt/cbrt.htm 260 // Cube root approximation, refer to: http://metamerist.com/cbrt/cbrt.htm
270 // Using initial approximation adapted from Kahan's cbrt and 4 iterations 261 // Using initial approximation adapted from Kahan's cbrt and 4 iterations
271 // of Newton's method. 262 // of Newton's method.
272 function MathCbrt(x) { 263 function MathCbrt(x) {
273 if (!IS_NUMBER(x)) x = NonNumberToNumber(x); 264 if (!IS_NUMBER(x)) x = NonNumberToNumber(x);
274 if (x == 0 || !NUMBER_IS_FINITE(x)) return x; 265 if (x == 0 || !NUMBER_IS_FINITE(x)) return x;
275 return x >= 0 ? CubeRoot(x) : -CubeRoot(-x); 266 return x >= 0 ? CubeRoot(x) : -CubeRoot(-x);
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
338 "min", MathMin, 329 "min", MathMin,
339 "imul", MathImul, 330 "imul", MathImul,
340 "sign", MathSign, 331 "sign", MathSign,
341 "trunc", MathTrunc, 332 "trunc", MathTrunc,
342 "tanh", MathTanh, 333 "tanh", MathTanh,
343 "asinh", MathAsinh, 334 "asinh", MathAsinh,
344 "acosh", MathAcosh, 335 "acosh", MathAcosh,
345 "atanh", MathAtanh, 336 "atanh", MathAtanh,
346 "hypot", MathHypot, 337 "hypot", MathHypot,
347 "fround", MathFroundJS, 338 "fround", MathFroundJS,
348 "clz32", MathClz32, 339 "clz32", MathClz32JS,
349 "cbrt", MathCbrt 340 "cbrt", MathCbrt
350 )); 341 ));
351 342
352 %SetInlineBuiltinFlag(MathAbs); 343 %SetInlineBuiltinFlag(MathAbs);
353 %SetInlineBuiltinFlag(MathCeil); 344 %SetInlineBuiltinFlag(MathCeil);
345 %SetInlineBuiltinFlag(MathClz32JS);
354 %SetInlineBuiltinFlag(MathFloorJS); 346 %SetInlineBuiltinFlag(MathFloorJS);
355 %SetInlineBuiltinFlag(MathRandom); 347 %SetInlineBuiltinFlag(MathRandom);
356 %SetInlineBuiltinFlag(MathSqrtJS); 348 %SetInlineBuiltinFlag(MathSqrtJS);
357 349
358 // Expose to the global scope. 350 // Expose to the global scope.
359 $abs = MathAbs; 351 $abs = MathAbs;
360 $exp = MathExp; 352 $exp = MathExp;
361 $floor = MathFloorJS; 353 $floor = MathFloorJS;
362 $max = MathMax; 354 $max = MathMax;
363 $min = MathMin; 355 $min = MathMin;
364 356
365 })(); 357 })();
OLDNEW
« no previous file with comments | « src/ia32/macro-assembler-ia32.cc ('k') | src/runtime/runtime.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698