Revision: 3954
Author: [email protected]
Date: Thu Feb 25 08:46:37 2010
Log: Optimize three Number2Integer functions in runtime.cc: remove the
check that was already done in JavaScript, add simpler code in case we are
getting a SMI
result.
Code review: http://codereview.chromium.org/660084
http://code.google.com/p/v8/source/detail?r=3954
Modified:
/branches/bleeding_edge/src/runtime.cc
=======================================
--- /branches/bleeding_edge/src/runtime.cc Thu Feb 25 04:49:23 2010
+++ /branches/bleeding_edge/src/runtime.cc Thu Feb 25 08:46:37 2010
@@ -4152,10 +4152,14 @@
NoHandleAllocation ha;
ASSERT(args.length() == 1);
- Object* obj = args[0];
- if (obj->IsSmi()) return obj;
- CONVERT_DOUBLE_CHECKED(number, obj);
- return Heap::NumberFromDouble(DoubleToInteger(number));
+ CONVERT_DOUBLE_CHECKED(number, args[0]);
+
+ // We do not include 0 so that we don't have to treat +0 / -0 cases.
+ if (number > 0 && number <= Smi::kMaxValue) {
+ return Smi::FromInt(static_cast<int>(number));
+ } else {
+ return Heap::NumberFromDouble(DoubleToInteger(number));
+ }
}
@@ -4163,9 +4167,7 @@
NoHandleAllocation ha;
ASSERT(args.length() == 1);
- Object* obj = args[0];
- if (obj->IsSmi() && Smi::cast(obj)->value() >= 0) return obj;
- CONVERT_NUMBER_CHECKED(int32_t, number, Uint32, obj);
+ CONVERT_NUMBER_CHECKED(int32_t, number, Uint32, args[0]);
return Heap::NumberFromUint32(number);
}
@@ -4174,10 +4176,14 @@
NoHandleAllocation ha;
ASSERT(args.length() == 1);
- Object* obj = args[0];
- if (obj->IsSmi()) return obj;
- CONVERT_DOUBLE_CHECKED(number, obj);
- return Heap::NumberFromInt32(DoubleToInt32(number));
+ CONVERT_DOUBLE_CHECKED(number, args[0]);
+
+ // We do not include 0 so that we don't have to treat +0 / -0 cases.
+ if (number > 0 && number <= Smi::kMaxValue) {
+ return Smi::FromInt(static_cast<int>(number));
+ } else {
+ return Heap::NumberFromInt32(DoubleToInt32(number));
+ }
}
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev