| Index: src/ia32/stub-cache-ia32.cc
|
| diff --git a/src/ia32/stub-cache-ia32.cc b/src/ia32/stub-cache-ia32.cc
|
| index c9c22d2008553c5ae8cf1856824bd9bd98d86558..bb068965924b13d32b26dd875d5f67ea32dbbe93 100644
|
| --- a/src/ia32/stub-cache-ia32.cc
|
| +++ b/src/ia32/stub-cache-ia32.cc
|
| @@ -1330,7 +1330,8 @@ void CallStubCompiler::GenerateLoadFunctionFromCell(JSGlobalPropertyCell* cell,
|
| MaybeObject* CallStubCompiler::GenerateMissBranch() {
|
| MaybeObject* maybe_obj =
|
| isolate()->stub_cache()->ComputeCallMiss(arguments().immediate(),
|
| - kind_);
|
| + kind_,
|
| + extra_ic_state_);
|
| Object* obj;
|
| if (!maybe_obj->ToObject(&obj)) return maybe_obj;
|
| __ jmp(Handle<Code>(Code::cast(obj)), RelocInfo::CODE_TARGET);
|
| @@ -1657,7 +1658,9 @@ MaybeObject* CallStubCompiler::CompileStringCharCodeAtCall(
|
| Label index_out_of_range;
|
| Label* index_out_of_range_label = &index_out_of_range;
|
|
|
| - if (kind_ == Code::CALL_IC && extra_ic_state_ == DEFAULT_STRING_STUB) {
|
| + if (kind_ == Code::CALL_IC &&
|
| + (CallICBase::StringStubState::decode(extra_ic_state_) ==
|
| + DEFAULT_STRING_STUB)) {
|
| index_out_of_range_label = &miss;
|
| }
|
|
|
| @@ -1741,7 +1744,9 @@ MaybeObject* CallStubCompiler::CompileStringCharAtCall(
|
| Label index_out_of_range;
|
| Label* index_out_of_range_label = &index_out_of_range;
|
|
|
| - if (kind_ == Code::CALL_IC && extra_ic_state_ == DEFAULT_STRING_STUB) {
|
| + if (kind_ == Code::CALL_IC &&
|
| + (CallICBase::StringStubState::decode(extra_ic_state_) ==
|
| + DEFAULT_STRING_STUB)) {
|
| index_out_of_range_label = &miss;
|
| }
|
|
|
| @@ -2373,11 +2378,13 @@ MaybeObject* CallStubCompiler::CompileCallInterceptor(JSObject* object,
|
| }
|
|
|
|
|
| -MaybeObject* CallStubCompiler::CompileCallGlobal(JSObject* object,
|
| - GlobalObject* holder,
|
| - JSGlobalPropertyCell* cell,
|
| - JSFunction* function,
|
| - String* name) {
|
| +MaybeObject* CallStubCompiler::CompileCallGlobal(
|
| + JSObject* object,
|
| + GlobalObject* holder,
|
| + JSGlobalPropertyCell* cell,
|
| + JSFunction* function,
|
| + String* name,
|
| + Code::ExtraICState extra_ic_state) {
|
| // ----------- S t a t e -------------
|
| // -- ecx : name
|
| // -- esp[0] : return address
|
| @@ -2420,16 +2427,21 @@ MaybeObject* CallStubCompiler::CompileCallGlobal(JSObject* object,
|
| __ IncrementCounter(counters->call_global_inline(), 1);
|
| ASSERT(function->is_compiled());
|
| ParameterCount expected(function->shared()->formal_parameter_count());
|
| + CallKind call_kind = CallICBase::Contextual::decode(extra_ic_state)
|
| + ? CALL_AS_FUNCTION
|
| + : CALL_AS_METHOD;
|
| if (V8::UseCrankshaft()) {
|
| // TODO(kasperl): For now, we always call indirectly through the
|
| // code field in the function to allow recompilation to take effect
|
| // without changing any of the call sites.
|
| __ InvokeCode(FieldOperand(edi, JSFunction::kCodeEntryOffset),
|
| - expected, arguments(), JUMP_FUNCTION);
|
| + expected, arguments(), JUMP_FUNCTION,
|
| + NullCallWrapper(), call_kind);
|
| } else {
|
| Handle<Code> code(function->code());
|
| __ InvokeCode(code, expected, arguments(),
|
| - RelocInfo::CODE_TARGET, JUMP_FUNCTION);
|
| + RelocInfo::CODE_TARGET, JUMP_FUNCTION,
|
| + NullCallWrapper(), call_kind);
|
| }
|
|
|
| // Handle call cache miss.
|
|
|