diff --git a/src/hydrogen.cc b/src/hydrogen.cc index ef07d96a9c..3049dfe104 100644 --- a/src/hydrogen.cc +++ b/src/hydrogen.cc @@ -6366,7 +6366,7 @@ bool HOptimizedGraphBuilder::TryInline(CallKind call_kind, return false; } -#if !V8_TARGET_ARCH_IA32 && !V8_TARGET_ARCH_ARM +#if !V8_TARGET_ARCH_IA32 && !V8_TARGET_ARCH_ARM && !V8_TARGET_ARCH_MIPS // Target must be able to use caller's context. CompilationInfo* outer_info = current_info(); if (target->context() != outer_info->closure()->context() || @@ -6515,9 +6515,9 @@ bool HOptimizedGraphBuilder::TryInline(CallKind call_kind, undefined, function_state()->inlining_kind(), undefined_receiver); -#if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_ARM - // IA32 and ARM only, overwrite the caller's context in the deoptimization - // environment with the correct one. +#if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_ARM || V8_TARGET_ARCH_MIPS + // IA32, ARM and MIPS only, overwrite the caller's context in the + // deoptimization environment with the correct one. // // TODO(kmillikin): implement the same inlining on other platforms so we // can remove the unsightly ifdefs in this function. diff --git a/src/mips/lithium-codegen-mips.cc b/src/mips/lithium-codegen-mips.cc index 227f5f8a2b..38b0ff5274 100644 --- a/src/mips/lithium-codegen-mips.cc +++ b/src/mips/lithium-codegen-mips.cc @@ -732,6 +732,10 @@ void LCodeGen::LoadContextFromDeferred(LOperand* context) { __ Move(cp, ToRegister(context)); } else if (context->IsStackSlot()) { __ lw(cp, ToMemOperand(context)); + } else if (context->IsConstantOperand()) { + HConstant* constant = + chunk_->LookupConstant(LConstantOperand::cast(context)); + __ LoadObject(cp, Handle::cast(constant->handle(isolate()))); } else { UNREACHABLE(); }