Index: src/code-stubs.cc |
diff --git a/src/code-stubs.cc b/src/code-stubs.cc |
index d656d583e42a90e785d567a46fa189320c3fd865..07cb4f11dd10b6fd9f8749675a7714e16360d9cc 100644 |
--- a/src/code-stubs.cc |
+++ b/src/code-stubs.cc |
@@ -370,6 +370,40 @@ |
Condition CompareICStub::GetCondition() const { |
return CompareIC::ComputeCondition(op()); |
+} |
+ |
+ |
+void CompareICStub::AddToSpecialCache(Handle<Code> new_object) { |
+ DCHECK(*known_map_ != NULL); |
+ Isolate* isolate = new_object->GetIsolate(); |
+ Factory* factory = isolate->factory(); |
+ return Map::UpdateCodeCache(known_map_, |
+ strict() ? |
+ factory->strict_compare_ic_string() : |
+ factory->compare_ic_string(), |
+ new_object); |
+} |
+ |
+ |
+bool CompareICStub::FindCodeInSpecialCache(Code** code_out) { |
+ Code::Flags flags = Code::ComputeFlags( |
+ GetCodeKind(), |
+ UNINITIALIZED); |
+ Name* name = strict() ? isolate()->heap()->strict_compare_ic_string() |
+ : isolate()->heap()->compare_ic_string(); |
+ Code* code = known_map_->LookupInCodeCache(name, flags); |
+ if (code != nullptr) { |
+ *code_out = code; |
+#ifdef DEBUG |
+ CompareICStub decode((*code_out)->stub_key(), isolate()); |
+ DCHECK(op() == decode.op()); |
+ DCHECK(left() == decode.left()); |
+ DCHECK(right() == decode.right()); |
+ DCHECK(state() == decode.state()); |
+#endif |
+ return true; |
+ } |
+ return false; |
} |