| Index: src/x64/stub-cache-x64.cc | 
| diff --git a/src/x64/stub-cache-x64.cc b/src/x64/stub-cache-x64.cc | 
| index 143d8d8697ee19b159837b8c2896e2b0c4e80eb4..d4b3d4b9edccc38cccb82e555a708c5d7d7cd995 100644 | 
| --- a/src/x64/stub-cache-x64.cc | 
| +++ b/src/x64/stub-cache-x64.cc | 
| @@ -1294,8 +1294,10 @@ void CallStubCompiler::GenerateLoadFunctionFromCell(JSGlobalPropertyCell* cell, | 
|  | 
|  | 
| MaybeObject* CallStubCompiler::GenerateMissBranch() { | 
| -  MaybeObject* maybe_obj = isolate()->stub_cache()->ComputeCallMiss( | 
| -      arguments().immediate(), kind_); | 
| +  MaybeObject* maybe_obj = | 
| +      isolate()->stub_cache()->ComputeCallMiss(arguments().immediate(), | 
| +                                               kind_, | 
| +                                               extra_ic_state_); | 
| Object* obj; | 
| if (!maybe_obj->ToObject(&obj)) return maybe_obj; | 
| __ Jump(Handle<Code>(Code::cast(obj)), RelocInfo::CODE_TARGET); | 
| @@ -1626,7 +1628,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; | 
| } | 
|  | 
| @@ -1708,7 +1712,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; | 
| } | 
|  | 
| @@ -2211,11 +2217,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 ------------- | 
| // rcx                 : function name | 
| // rsp[0]              : return address | 
| @@ -2260,16 +2268,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. | 
| __ movq(rdx, FieldOperand(rdi, JSFunction::kCodeEntryOffset)); | 
| -    __ InvokeCode(rdx, expected, arguments(), JUMP_FUNCTION); | 
| +    __ InvokeCode(rdx, 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. | 
| __ bind(&miss); | 
|  |