Commit 7f6270db authored by verwaest@chromium.org's avatar verwaest@chromium.org

Don't use StubType to probe the code caches.

There is only one stub-type in the cache at all times. By ignoring the type up-front, we can in a later phase move cache probing before even computing the type.

BUG=
R=ulan@chromium.org

Review URL: https://chromiumcodereview.appspot.com/25520003

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@17089 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 2c5d0d82
...@@ -7349,11 +7349,10 @@ MaybeObject* CodeCache::UpdateNormalTypeCache(Name* name, Code* code) { ...@@ -7349,11 +7349,10 @@ MaybeObject* CodeCache::UpdateNormalTypeCache(Name* name, Code* code) {
Object* CodeCache::Lookup(Name* name, Code::Flags flags) { Object* CodeCache::Lookup(Name* name, Code::Flags flags) {
if (Code::ExtractTypeFromFlags(flags) == Code::NORMAL) { flags = Code::RemoveTypeFromFlags(flags);
return LookupNormalTypeCache(name, flags); Object* result = LookupDefaultCache(name, flags);
} else { if (result->IsCode()) return result;
return LookupDefaultCache(name, flags); return LookupNormalTypeCache(name, flags);
}
} }
...@@ -7367,7 +7366,7 @@ Object* CodeCache::LookupDefaultCache(Name* name, Code::Flags flags) { ...@@ -7367,7 +7366,7 @@ Object* CodeCache::LookupDefaultCache(Name* name, Code::Flags flags) {
if (key->IsUndefined()) return key; if (key->IsUndefined()) return key;
if (name->Equals(Name::cast(key))) { if (name->Equals(Name::cast(key))) {
Code* code = Code::cast(cache->get(i + kCodeCacheEntryCodeOffset)); Code* code = Code::cast(cache->get(i + kCodeCacheEntryCodeOffset));
if (code->flags() == flags) { if (Code::RemoveTypeFromFlags(code->flags()) == flags) {
return code; return code;
} }
} }
...@@ -7431,9 +7430,7 @@ class CodeCacheHashTableKey : public HashTableKey { ...@@ -7431,9 +7430,7 @@ class CodeCacheHashTableKey : public HashTableKey {
: name_(name), flags_(flags), code_(NULL) { } : name_(name), flags_(flags), code_(NULL) { }
CodeCacheHashTableKey(Name* name, Code* code) CodeCacheHashTableKey(Name* name, Code* code)
: name_(name), : name_(name), flags_(code->flags()), code_(code) { }
flags_(code->flags()),
code_(code) { }
bool IsMatch(Object* other) { bool IsMatch(Object* other) {
......
This diff is collapsed.
...@@ -83,24 +83,20 @@ class StubCache { ...@@ -83,24 +83,20 @@ class StubCache {
Handle<Code> FindIC(Handle<Name> name, Handle<Code> FindIC(Handle<Name> name,
Handle<Map> stub_holder_map, Handle<Map> stub_holder_map,
Code::Kind kind, Code::Kind kind,
Code::StubType type,
Code::ExtraICState extra_state = Code::kNoExtraICState); Code::ExtraICState extra_state = Code::kNoExtraICState);
Handle<Code> FindIC(Handle<Name> name, Handle<Code> FindIC(Handle<Name> name,
Handle<JSObject> stub_holder, Handle<JSObject> stub_holder,
Code::Kind kind, Code::Kind kind,
Code::StubType type,
Code::ExtraICState extra_state = Code::kNoExtraICState); Code::ExtraICState extra_state = Code::kNoExtraICState);
Handle<Code> FindLoadHandler(Handle<Name> name, Handle<Code> FindLoadHandler(Handle<Name> name,
Handle<JSObject> receiver, Handle<JSObject> receiver,
Code::Kind kind, Code::Kind kind);
Code::StubType type);
Handle<Code> FindStoreHandler(Handle<Name> name, Handle<Code> FindStoreHandler(Handle<Name> name,
Handle<JSObject> receiver, Handle<JSObject> receiver,
Code::Kind kind, Code::Kind kind,
Code::StubType type,
StrictModeFlag strict_mode); StrictModeFlag strict_mode);
Handle<Code> ComputeMonomorphicIC(Handle<HeapObject> receiver, Handle<Code> ComputeMonomorphicIC(Handle<HeapObject> receiver,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment