From: olivf@chromium.org Date: Fri, 7 Jun 2013 13:11:17 +0000 (+0000) Subject: Fix InlineCacheState for ToBoolean and CompareIC X-Git-Tag: upstream/4.7.83~13960 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9595a691b09d53f9688b5f31f52d877659c13271;p=platform%2Fupstream%2Fv8.git Fix InlineCacheState for ToBoolean and CompareIC BUG= R=verwaest@chromium.org Review URL: https://codereview.chromium.org/16613003 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@15003 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- diff --git a/src/code-stubs.cc b/src/code-stubs.cc index 4c6ee86..b4479da 100644 --- a/src/code-stubs.cc +++ b/src/code-stubs.cc @@ -305,6 +305,27 @@ void BinaryOpStub::GenerateStringStub(MacroAssembler* masm) { } +InlineCacheState ICCompareStub::GetICState() { + CompareIC::State state = Max(left_, right_); + switch (state) { + case CompareIC::UNINITIALIZED: + return ::v8::internal::UNINITIALIZED; + case CompareIC::SMI: + case CompareIC::NUMBER: + case CompareIC::INTERNALIZED_STRING: + case CompareIC::STRING: + case CompareIC::UNIQUE_NAME: + case CompareIC::OBJECT: + case CompareIC::KNOWN_OBJECT: + return MONOMORPHIC; + case CompareIC::GENERIC: + return ::v8::internal::GENERIC; + } + UNREACHABLE(); + return ::v8::internal::UNINITIALIZED; +} + + void ICCompareStub::AddToSpecialCache(Handle new_object) { ASSERT(*known_map_ != NULL); Isolate* isolate = new_object->GetIsolate(); diff --git a/src/code-stubs.h b/src/code-stubs.h index ad1f09b..013086e 100644 --- a/src/code-stubs.h +++ b/src/code-stubs.h @@ -1080,6 +1080,8 @@ class ICCompareStub: public PlatformCodeStub { return static_cast(HandlerStateField::decode(minor_key)); } + virtual InlineCacheState GetICState(); + private: class OpField: public BitField { }; class LeftStateField: public BitField { }; @@ -2027,6 +2029,13 @@ class ToBooleanStub: public HydrogenCodeStub { return types_.ToIntegral(); } + virtual InlineCacheState GetICState() { + if (types_.IsEmpty()) { + return ::v8::internal::UNINITIALIZED; + } else { + return MONOMORPHIC; + } + } private: Major MajorKey() { return ToBoolean; }