summaryrefslogtreecommitdiff
path: root/deps/v8/src/ic.cc
diff options
context:
space:
mode:
authorRyan Dahl <ry@tinyclouds.org>2010-04-14 10:34:17 -0700
committerRyan Dahl <ry@tinyclouds.org>2010-04-14 10:34:27 -0700
commit41ef1717e096a9e1761efa0df97c395f59c51f16 (patch)
tree7e854284ef8ce5189a63074857a408b6eea5a9cb /deps/v8/src/ic.cc
parent760bba55186eba039ca00e532f7813d2aea450a2 (diff)
downloadnode-new-41ef1717e096a9e1761efa0df97c395f59c51f16.tar.gz
Upgrade V8 to 2.2.3.1
Diffstat (limited to 'deps/v8/src/ic.cc')
-rw-r--r--deps/v8/src/ic.cc27
1 files changed, 5 insertions, 22 deletions
diff --git a/deps/v8/src/ic.cc b/deps/v8/src/ic.cc
index a6d2020b44..b9ca00f829 100644
--- a/deps/v8/src/ic.cc
+++ b/deps/v8/src/ic.cc
@@ -224,7 +224,8 @@ void IC::Clear(Address address) {
case Code::STORE_IC: return StoreIC::Clear(address, target);
case Code::KEYED_STORE_IC: return KeyedStoreIC::Clear(address, target);
case Code::CALL_IC: return CallIC::Clear(address, target);
- case Code::BINARY_OP_IC: return BinaryOpIC::Clear(address, target);
+ case Code::BINARY_OP_IC: return; // Clearing these is tricky and does not
+ // make any performance difference.
default: UNREACHABLE();
}
}
@@ -1404,25 +1405,6 @@ void BinaryOpIC::patch(Code* code) {
}
-void BinaryOpIC::Clear(Address address, Code* target) {
- if (target->ic_state() == UNINITIALIZED) return;
-
- // At the end of a fast case stub there should be a reference to
- // a corresponding UNINITIALIZED stub, so look for the last reloc info item.
- RelocInfo* rinfo = NULL;
- for (RelocIterator it(target, RelocInfo::kCodeTargetMask);
- !it.done(); it.next()) {
- rinfo = it.rinfo();
- }
-
- ASSERT(rinfo != NULL);
- Code* uninit_stub = Code::GetCodeFromTargetAddress(rinfo->target_address());
- ASSERT(uninit_stub->ic_state() == UNINITIALIZED &&
- uninit_stub->kind() == Code::BINARY_OP_IC);
- SetTargetAtAddress(address, uninit_stub);
-}
-
-
const char* BinaryOpIC::GetName(TypeInfo type_info) {
switch (type_info) {
case DEFAULT: return "Default";
@@ -1451,8 +1433,9 @@ BinaryOpIC::State BinaryOpIC::ToState(TypeInfo type_info) {
BinaryOpIC::TypeInfo BinaryOpIC::GetTypeInfo(Object* left,
Object* right) {
- // Patching is never requested for the two smis.
- ASSERT(!left->IsSmi() || !right->IsSmi());
+ if (left->IsSmi() && right->IsSmi()) {
+ return GENERIC;
+ }
if (left->IsNumber() && right->IsNumber()) {
return HEAP_NUMBERS;