| Index: src/stub-cache.cc
|
| diff --git a/src/stub-cache.cc b/src/stub-cache.cc
|
| index 96aa50f01cf34819cba71c8182a36e1633e60248..cdf3960a9d4d9b49cd6adbc6a8e91d842cd3a06b 100644
|
| --- a/src/stub-cache.cc
|
| +++ b/src/stub-cache.cc
|
| @@ -125,8 +125,8 @@ Handle<Code> StubCache::ComputeLoadNonexistent(Handle<String> name,
|
|
|
| // Compile the stub that is either shared for all names or
|
| // name specific if there are global objects involved.
|
| - Code::Flags flags =
|
| - Code::ComputeMonomorphicFlags(Code::LOAD_IC, Code::NONEXISTENT);
|
| + Code::Flags flags = Code::ComputeMonomorphicFlags(
|
| + Code::LOAD_IC, Code::kNoExtraICState, Code::NONEXISTENT);
|
| Handle<Object> probe(receiver->map()->FindInCodeCache(*cache_name, flags),
|
| isolate_);
|
| if (probe->IsCode()) return Handle<Code>::cast(probe);
|
| @@ -148,7 +148,8 @@ Handle<Code> StubCache::ComputeLoadField(Handle<String> name,
|
| InlineCacheHolderFlag cache_holder =
|
| IC::GetCodeCacheForObject(*receiver, *holder);
|
| Handle<JSObject> map_holder(IC::GetCodeCacheHolder(*receiver, cache_holder));
|
| - Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, Code::FIELD);
|
| + Code::Flags flags = Code::ComputeMonomorphicFlags(
|
| + Code::LOAD_IC, Code::kNoExtraICState, Code::FIELD);
|
| Handle<Object> probe(map_holder->map()->FindInCodeCache(*name, flags),
|
| isolate_);
|
| if (probe->IsCode()) return Handle<Code>::cast(probe);
|
| @@ -170,8 +171,8 @@ Handle<Code> StubCache::ComputeLoadCallback(Handle<String> name,
|
| InlineCacheHolderFlag cache_holder =
|
| IC::GetCodeCacheForObject(*receiver, *holder);
|
| Handle<JSObject> map_holder(IC::GetCodeCacheHolder(*receiver, cache_holder));
|
| - Code::Flags flags =
|
| - Code::ComputeMonomorphicFlags(Code::LOAD_IC, Code::CALLBACKS);
|
| + Code::Flags flags = Code::ComputeMonomorphicFlags(
|
| + Code::LOAD_IC, Code::kNoExtraICState, Code::CALLBACKS);
|
| Handle<Object> probe(map_holder->map()->FindInCodeCache(*name, flags),
|
| isolate_);
|
| if (probe->IsCode()) return Handle<Code>::cast(probe);
|
| @@ -193,8 +194,8 @@ Handle<Code> StubCache::ComputeLoadViaGetter(Handle<String> name,
|
| InlineCacheHolderFlag cache_holder =
|
| IC::GetCodeCacheForObject(*receiver, *holder);
|
| Handle<JSObject> map_holder(IC::GetCodeCacheHolder(*receiver, cache_holder));
|
| - Code::Flags flags =
|
| - Code::ComputeMonomorphicFlags(Code::LOAD_IC, Code::CALLBACKS);
|
| + Code::Flags flags = Code::ComputeMonomorphicFlags(
|
| + Code::LOAD_IC, Code::kNoExtraICState, Code::CALLBACKS);
|
| Handle<Object> probe(map_holder->map()->FindInCodeCache(*name, flags),
|
| isolate_);
|
| if (probe->IsCode()) return Handle<Code>::cast(probe);
|
| @@ -216,8 +217,8 @@ Handle<Code> StubCache::ComputeLoadConstant(Handle<String> name,
|
| InlineCacheHolderFlag cache_holder =
|
| IC::GetCodeCacheForObject(*receiver, *holder);
|
| Handle<JSObject> map_holder(IC::GetCodeCacheHolder(*receiver, cache_holder));
|
| - Code::Flags flags =
|
| - Code::ComputeMonomorphicFlags(Code::LOAD_IC, Code::CONSTANT_FUNCTION);
|
| + Code::Flags flags = Code::ComputeMonomorphicFlags(
|
| + Code::LOAD_IC, Code::kNoExtraICState, Code::CONSTANT_FUNCTION);
|
| Handle<Object> probe(map_holder->map()->FindInCodeCache(*name, flags),
|
| isolate_);
|
| if (probe->IsCode()) return Handle<Code>::cast(probe);
|
| @@ -238,8 +239,8 @@ Handle<Code> StubCache::ComputeLoadInterceptor(Handle<String> name,
|
| InlineCacheHolderFlag cache_holder =
|
| IC::GetCodeCacheForObject(*receiver, *holder);
|
| Handle<JSObject> map_holder(IC::GetCodeCacheHolder(*receiver, cache_holder));
|
| - Code::Flags flags =
|
| - Code::ComputeMonomorphicFlags(Code::LOAD_IC, Code::INTERCEPTOR);
|
| + Code::Flags flags = Code::ComputeMonomorphicFlags(
|
| + Code::LOAD_IC, Code::kNoExtraICState, Code::INTERCEPTOR);
|
| Handle<Object> probe(map_holder->map()->FindInCodeCache(*name, flags),
|
| isolate_);
|
| if (probe->IsCode()) return Handle<Code>::cast(probe);
|
| @@ -267,8 +268,7 @@ Handle<Code> StubCache::ComputeLoadGlobal(Handle<String> name,
|
| InlineCacheHolderFlag cache_holder =
|
| IC::GetCodeCacheForObject(*receiver, *holder);
|
| Handle<JSObject> map_holder(IC::GetCodeCacheHolder(*receiver, cache_holder));
|
| - Code::Flags flags =
|
| - Code::ComputeMonomorphicFlags(Code::LOAD_IC, Code::NORMAL);
|
| + Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC);
|
| Handle<Object> probe(map_holder->map()->FindInCodeCache(*name, flags),
|
| isolate_);
|
| if (probe->IsCode()) return Handle<Code>::cast(probe);
|
| @@ -290,8 +290,8 @@ Handle<Code> StubCache::ComputeKeyedLoadField(Handle<String> name,
|
| InlineCacheHolderFlag cache_holder =
|
| IC::GetCodeCacheForObject(*receiver, *holder);
|
| Handle<JSObject> map_holder(IC::GetCodeCacheHolder(*receiver, cache_holder));
|
| - Code::Flags flags =
|
| - Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, Code::FIELD);
|
| + Code::Flags flags = Code::ComputeMonomorphicFlags(
|
| + Code::KEYED_LOAD_IC, Code::kNoExtraICState, Code::FIELD);
|
| Handle<Object> probe(map_holder->map()->FindInCodeCache(*name, flags),
|
| isolate_);
|
| if (probe->IsCode()) return Handle<Code>::cast(probe);
|
| @@ -312,8 +312,8 @@ Handle<Code> StubCache::ComputeKeyedLoadConstant(Handle<String> name,
|
| InlineCacheHolderFlag cache_holder =
|
| IC::GetCodeCacheForObject(*receiver, *holder);
|
| Handle<JSObject> map_holder(IC::GetCodeCacheHolder(*receiver, cache_holder));
|
| - Code::Flags flags = Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC,
|
| - Code::CONSTANT_FUNCTION);
|
| + Code::Flags flags = Code::ComputeMonomorphicFlags(
|
| + Code::KEYED_LOAD_IC, Code::kNoExtraICState, Code::CONSTANT_FUNCTION);
|
| Handle<Object> probe(map_holder->map()->FindInCodeCache(*name, flags),
|
| isolate_);
|
| if (probe->IsCode()) return Handle<Code>::cast(probe);
|
| @@ -334,8 +334,8 @@ Handle<Code> StubCache::ComputeKeyedLoadInterceptor(Handle<String> name,
|
| InlineCacheHolderFlag cache_holder =
|
| IC::GetCodeCacheForObject(*receiver, *holder);
|
| Handle<JSObject> map_holder(IC::GetCodeCacheHolder(*receiver, cache_holder));
|
| - Code::Flags flags =
|
| - Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, Code::INTERCEPTOR);
|
| + Code::Flags flags = Code::ComputeMonomorphicFlags(
|
| + Code::KEYED_LOAD_IC, Code::kNoExtraICState, Code::INTERCEPTOR);
|
| Handle<Object> probe(map_holder->map()->FindInCodeCache(*name, flags),
|
| isolate_);
|
| if (probe->IsCode()) return Handle<Code>::cast(probe);
|
| @@ -357,8 +357,8 @@ Handle<Code> StubCache::ComputeKeyedLoadCallback(
|
| InlineCacheHolderFlag cache_holder =
|
| IC::GetCodeCacheForObject(*receiver, *holder);
|
| Handle<JSObject> map_holder(IC::GetCodeCacheHolder(*receiver, cache_holder));
|
| - Code::Flags flags =
|
| - Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, Code::CALLBACKS);
|
| + Code::Flags flags = Code::ComputeMonomorphicFlags(
|
| + Code::KEYED_LOAD_IC, Code::kNoExtraICState, Code::CALLBACKS);
|
| Handle<Object> probe(map_holder->map()->FindInCodeCache(*name, flags),
|
| isolate_);
|
| if (probe->IsCode()) return Handle<Code>::cast(probe);
|
| @@ -381,7 +381,7 @@ Handle<Code> StubCache::ComputeStoreField(Handle<String> name,
|
| Code::StubType type =
|
| (transition.is_null()) ? Code::FIELD : Code::MAP_TRANSITION;
|
| Code::Flags flags = Code::ComputeMonomorphicFlags(
|
| - Code::STORE_IC, type, strict_mode);
|
| + Code::STORE_IC, strict_mode, type);
|
| Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags),
|
| isolate_);
|
| if (probe->IsCode()) return Handle<Code>::cast(probe);
|
| @@ -397,8 +397,7 @@ Handle<Code> StubCache::ComputeStoreField(Handle<String> name,
|
|
|
|
|
| Handle<Code> StubCache::ComputeKeyedLoadElement(Handle<Map> receiver_map) {
|
| - Code::Flags flags =
|
| - Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, Code::NORMAL);
|
| + Code::Flags flags = Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC);
|
| Handle<String> name =
|
| isolate()->factory()->KeyedLoadElementMonomorphic_symbol();
|
|
|
| @@ -422,7 +421,7 @@ Handle<Code> StubCache::ComputeKeyedStoreElement(
|
| Code::ExtraICState extra_state =
|
| Code::ComputeExtraICState(grow_mode, strict_mode);
|
| Code::Flags flags = Code::ComputeMonomorphicFlags(
|
| - Code::KEYED_STORE_IC, Code::NORMAL, extra_state);
|
| + Code::KEYED_STORE_IC, extra_state);
|
|
|
| ASSERT(stub_kind == KeyedStoreIC::STORE_NO_TRANSITION ||
|
| stub_kind == KeyedStoreIC::STORE_AND_GROW_NO_TRANSITION);
|
| @@ -455,7 +454,7 @@ Handle<Code> StubCache::ComputeStoreGlobal(Handle<String> name,
|
| Handle<JSGlobalPropertyCell> cell,
|
| StrictModeFlag strict_mode) {
|
| Code::Flags flags = Code::ComputeMonomorphicFlags(
|
| - Code::STORE_IC, Code::NORMAL, strict_mode);
|
| + Code::STORE_IC, strict_mode);
|
| Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags),
|
| isolate_);
|
| if (probe->IsCode()) return Handle<Code>::cast(probe);
|
| @@ -476,7 +475,7 @@ Handle<Code> StubCache::ComputeStoreCallback(Handle<String> name,
|
| StrictModeFlag strict_mode) {
|
| ASSERT(v8::ToCData<Address>(callback->setter()) != 0);
|
| Code::Flags flags = Code::ComputeMonomorphicFlags(
|
| - Code::STORE_IC, Code::CALLBACKS, strict_mode);
|
| + Code::STORE_IC, strict_mode, Code::CALLBACKS);
|
| Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags),
|
| isolate_);
|
| if (probe->IsCode()) return Handle<Code>::cast(probe);
|
| @@ -497,7 +496,7 @@ Handle<Code> StubCache::ComputeStoreViaSetter(Handle<String> name,
|
| Handle<JSFunction> setter,
|
| StrictModeFlag strict_mode) {
|
| Code::Flags flags = Code::ComputeMonomorphicFlags(
|
| - Code::STORE_IC, Code::CALLBACKS, strict_mode);
|
| + Code::STORE_IC, strict_mode, Code::CALLBACKS);
|
| Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags),
|
| isolate_);
|
| if (probe->IsCode()) return Handle<Code>::cast(probe);
|
| @@ -516,7 +515,7 @@ Handle<Code> StubCache::ComputeStoreInterceptor(Handle<String> name,
|
| Handle<JSObject> receiver,
|
| StrictModeFlag strict_mode) {
|
| Code::Flags flags = Code::ComputeMonomorphicFlags(
|
| - Code::STORE_IC, Code::INTERCEPTOR, strict_mode);
|
| + Code::STORE_IC, strict_mode, Code::INTERCEPTOR);
|
| Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags),
|
| isolate_);
|
| if (probe->IsCode()) return Handle<Code>::cast(probe);
|
| @@ -537,7 +536,7 @@ Handle<Code> StubCache::ComputeKeyedStoreField(Handle<String> name,
|
| Code::StubType type =
|
| (transition.is_null()) ? Code::FIELD : Code::MAP_TRANSITION;
|
| Code::Flags flags = Code::ComputeMonomorphicFlags(
|
| - Code::KEYED_STORE_IC, type, strict_mode);
|
| + Code::KEYED_STORE_IC, strict_mode, type);
|
| Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags),
|
| isolate_);
|
| if (probe->IsCode()) return Handle<Code>::cast(probe);
|
| @@ -586,9 +585,8 @@ Handle<Code> StubCache::ComputeCallConstant(int argc,
|
| return Handle<Code>::null();
|
| }
|
|
|
| - Code::Flags flags =
|
| - Code::ComputeMonomorphicFlags(kind, Code::CONSTANT_FUNCTION, extra_state,
|
| - cache_holder, argc);
|
| + Code::Flags flags = Code::ComputeMonomorphicFlags(
|
| + kind, extra_state, Code::CONSTANT_FUNCTION, argc, cache_holder);
|
| Handle<Object> probe(map_holder->map()->FindInCodeCache(*name, flags),
|
| isolate_);
|
| if (probe->IsCode()) return Handle<Code>::cast(probe);
|
| @@ -625,9 +623,8 @@ Handle<Code> StubCache::ComputeCallField(int argc,
|
| object = holder;
|
| }
|
|
|
| - Code::Flags flags =
|
| - Code::ComputeMonomorphicFlags(kind, Code::FIELD, extra_state,
|
| - cache_holder, argc);
|
| + Code::Flags flags = Code::ComputeMonomorphicFlags(
|
| + kind, extra_state, Code::FIELD, argc, cache_holder);
|
| Handle<Object> probe(map_holder->map()->FindInCodeCache(*name, flags),
|
| isolate_);
|
| if (probe->IsCode()) return Handle<Code>::cast(probe);
|
| @@ -663,9 +660,8 @@ Handle<Code> StubCache::ComputeCallInterceptor(int argc,
|
| object = holder;
|
| }
|
|
|
| - Code::Flags flags =
|
| - Code::ComputeMonomorphicFlags(kind, Code::INTERCEPTOR, extra_state,
|
| - cache_holder, argc);
|
| + Code::Flags flags = Code::ComputeMonomorphicFlags(
|
| + kind, extra_state, Code::INTERCEPTOR, argc, cache_holder);
|
| Handle<Object> probe(map_holder->map()->FindInCodeCache(*name, flags),
|
| isolate_);
|
| if (probe->IsCode()) return Handle<Code>::cast(probe);
|
| @@ -694,9 +690,8 @@ Handle<Code> StubCache::ComputeCallGlobal(int argc,
|
| InlineCacheHolderFlag cache_holder =
|
| IC::GetCodeCacheForObject(*receiver, *holder);
|
| Handle<JSObject> map_holder(IC::GetCodeCacheHolder(*receiver, cache_holder));
|
| - Code::Flags flags =
|
| - Code::ComputeMonomorphicFlags(kind, Code::NORMAL, extra_state,
|
| - cache_holder, argc);
|
| + Code::Flags flags = Code::ComputeMonomorphicFlags(
|
| + kind, extra_state, Code::NORMAL, argc, cache_holder);
|
| Handle<Object> probe(map_holder->map()->FindInCodeCache(*name, flags),
|
| isolate_);
|
| if (probe->IsCode()) return Handle<Code>::cast(probe);
|
| @@ -1526,7 +1521,8 @@ Handle<Code> LoadStubCompiler::CompileLoadViaGetter(
|
| Handle<Code> LoadStubCompiler::GetCode(Code::StubType type,
|
| Handle<String> name,
|
| InlineCacheState state) {
|
| - Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC, type);
|
| + Code::Flags flags = Code::ComputeMonomorphicFlags(
|
| + Code::LOAD_IC, Code::kNoExtraICState, type);
|
| Handle<Code> code = GetCodeWithFlags(flags, name);
|
| PROFILE(isolate(), CodeCreateEvent(Logger::LOAD_IC_TAG, *code, *name));
|
| GDBJIT(AddCode(GDBJITInterface::LOAD_IC, *name, *code));
|
| @@ -1582,8 +1578,8 @@ Handle<Code> KeyedLoadStubCompiler::CompileLoadElementPolymorphic(
|
|
|
| Handle<Code> StoreStubCompiler::GetCode(Code::StubType type,
|
| Handle<String> name) {
|
| - Code::Flags flags =
|
| - Code::ComputeMonomorphicFlags(Code::STORE_IC, type, strict_mode_);
|
| + Code::Flags flags = Code::ComputeMonomorphicFlags(
|
| + Code::STORE_IC, strict_mode_, type);
|
| Handle<Code> code = GetCodeWithFlags(flags, name);
|
| PROFILE(isolate(), CodeCreateEvent(Logger::STORE_IC_TAG, *code, *name));
|
| GDBJIT(AddCode(GDBJITInterface::STORE_IC, *name, *code));
|
| @@ -1717,10 +1713,10 @@ Handle<Code> CallStubCompiler::GetCode(Code::StubType type,
|
| Handle<String> name) {
|
| int argc = arguments_.immediate();
|
| Code::Flags flags = Code::ComputeMonomorphicFlags(kind_,
|
| - type,
|
| extra_state_,
|
| - cache_holder_,
|
| - argc);
|
| + type,
|
| + argc,
|
| + cache_holder_);
|
| return GetCodeWithFlags(flags, name);
|
| }
|
|
|
|
|