Revision: 9134
Author: [email protected]
Date: Mon Sep 5 04:08:57 2011
Log: Optimize isFinite and isNaN.
Arithmetic on infinities and NaN is much slower than doing several exact
comparisons.
Review URL: http://codereview.chromium.org/7830036
http://code.google.com/p/v8/source/detail?r=9134
Modified:
/branches/bleeding_edge/src/macros.py
/branches/bleeding_edge/src/v8natives.js
=======================================
--- /branches/bleeding_edge/src/macros.py Thu Sep 1 04:57:02 2011
+++ /branches/bleeding_edge/src/macros.py Mon Sep 5 04:08:57 2011
@@ -122,7 +122,7 @@
# Inline macros. Use %IS_VAR to make sure arg is evaluated only once.
macro NUMBER_IS_NAN(arg) = (!%_IsSmi(%IS_VAR(arg)) && !(arg == arg));
-macro NUMBER_IS_FINITE(arg) = (%_IsSmi(%IS_VAR(arg)) || arg - arg == 0);
+macro NUMBER_IS_FINITE(arg) = (%_IsSmi(%IS_VAR(arg)) || ((arg == arg) &&
(arg != 1/0) && (arg != -1/0)));
macro TO_INTEGER(arg) = (%_IsSmi(%IS_VAR(arg)) ?
arg : %NumberToInteger(ToNumber(arg)));
macro TO_INTEGER_MAP_MINUS_ZERO(arg) = (%_IsSmi(%IS_VAR(arg)) ?
arg : %NumberToIntegerMapMinusZero(ToNumber(arg)));
macro TO_INT32(arg) = (%_IsSmi(%IS_VAR(arg)) ? arg : (arg >> 0));
=======================================
--- /branches/bleeding_edge/src/v8natives.js Mon Sep 5 00:30:35 2011
+++ /branches/bleeding_edge/src/v8natives.js Mon Sep 5 04:08:57 2011
@@ -41,7 +41,6 @@
const $isNaN = GlobalIsNaN;
const $isFinite = GlobalIsFinite;
-
//
----------------------------------------------------------------------------
@@ -122,17 +121,15 @@
// ECMA 262 - 15.1.4
function GlobalIsNaN(number) {
- var n = ToNumber(number);
- return NUMBER_IS_NAN(n);
+ if (!IS_NUMBER(number)) number = NonNumberToNumber(number);
+ return NUMBER_IS_NAN(number);
}
// ECMA 262 - 15.1.5
function GlobalIsFinite(number) {
if (!IS_NUMBER(number)) number = NonNumberToNumber(number);
-
- // NaN - NaN == NaN, Infinity - Infinity == NaN, -Infinity - -Infinity
== NaN.
- return %_IsSmi(number) || number - number == 0;
+ return NUMBER_IS_FINITE(number);
}
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev