diff --git a/src/deoptimizer.cc b/src/deoptimizer.cc index 077337fbd0..76f2fa9bd7 100644 --- a/src/deoptimizer.cc +++ b/src/deoptimizer.cc @@ -1522,6 +1522,7 @@ void Deoptimizer::DoComputeCompiledStubFrame(TranslationIterator* iterator, output_frame->SetRegister(context_reg.code(), value); output_frame_offset -= kPointerSize; output_frame->SetFrameSlot(output_frame_offset, value); + ASSERT(reinterpret_cast(value)->IsContext()); if (trace_scope_ != NULL) { PrintF(trace_scope_->file(), " 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08" diff --git a/src/ia32/lithium-codegen-ia32.cc b/src/ia32/lithium-codegen-ia32.cc index eb1f960c0a..739f042cb8 100644 --- a/src/ia32/lithium-codegen-ia32.cc +++ b/src/ia32/lithium-codegen-ia32.cc @@ -4845,13 +4845,10 @@ void LCodeGen::DoTransitionElementsKind(LTransitionElementsKind* instr) { ToRegister(instr->temp()), kDontSaveFPRegs); } else { + ASSERT(ToRegister(instr->context()).is(esi)); PushSafepointRegistersScope scope(this); if (!object_reg.is(eax)) { - __ push(object_reg); - } - LoadContextFromDeferred(instr->context()); - if (!object_reg.is(eax)) { - __ pop(eax); + __ mov(eax, object_reg); } __ mov(ebx, to_map); TransitionElementsKindStub stub(from_kind, to_kind); diff --git a/src/ia32/lithium-ia32.cc b/src/ia32/lithium-ia32.cc index 921b5aa933..678c0ca70c 100644 --- a/src/ia32/lithium-ia32.cc +++ b/src/ia32/lithium-ia32.cc @@ -2420,7 +2420,7 @@ LInstruction* LChunkBuilder::DoTransitionElementsKind( new_map_reg, temp_reg); return result; } else { - LOperand* context = UseRegister(instr->context()); + LOperand* context = UseFixed(instr->context(), esi); LTransitionElementsKind* result = new(zone()) LTransitionElementsKind(object, context, NULL, NULL); return AssignPointerMap(result); diff --git a/src/ia32/macro-assembler-ia32.cc b/src/ia32/macro-assembler-ia32.cc index 2d0720a77d..b5cefdbc1a 100644 --- a/src/ia32/macro-assembler-ia32.cc +++ b/src/ia32/macro-assembler-ia32.cc @@ -1107,10 +1107,8 @@ void MacroAssembler::EnterExitFramePrologue() { push(Immediate(CodeObject())); // Accessed from ExitFrame::code_slot. // Save the frame pointer and the context in top. - ExternalReference c_entry_fp_address(Isolate::kCEntryFPAddress, - isolate()); - ExternalReference context_address(Isolate::kContextAddress, - isolate()); + ExternalReference c_entry_fp_address(Isolate::kCEntryFPAddress, isolate()); + ExternalReference context_address(Isolate::kContextAddress, isolate()); mov(Operand::StaticVariable(c_entry_fp_address), ebp); mov(Operand::StaticVariable(context_address), esi); } diff --git a/src/x64/lithium-codegen-x64.cc b/src/x64/lithium-codegen-x64.cc index e56bb544c5..046edbdda2 100644 --- a/src/x64/lithium-codegen-x64.cc +++ b/src/x64/lithium-codegen-x64.cc @@ -4363,11 +4363,11 @@ void LCodeGen::DoTransitionElementsKind(LTransitionElementsKind* instr) { __ RecordWriteField(object_reg, HeapObject::kMapOffset, new_map_reg, ToRegister(instr->temp()), kDontSaveFPRegs); } else { + ASSERT(ToRegister(instr->context()).is(rsi)); PushSafepointRegistersScope scope(this); if (!object_reg.is(rax)) { __ movq(rax, object_reg); } - LoadContextFromDeferred(instr->context()); __ Move(rbx, to_map); TransitionElementsKindStub stub(from_kind, to_kind); __ CallStub(&stub); diff --git a/src/x64/lithium-x64.cc b/src/x64/lithium-x64.cc index 78bc5bb708..eb005931a2 100644 --- a/src/x64/lithium-x64.cc +++ b/src/x64/lithium-x64.cc @@ -2266,7 +2266,7 @@ LInstruction* LChunkBuilder::DoTransitionElementsKind( object, NULL, new_map_reg, temp_reg); return result; } else { - LOperand* context = UseAny(instr->context()); + LOperand* context = UseFixed(instr->context(), rsi); LTransitionElementsKind* result = new(zone()) LTransitionElementsKind(object, context, NULL, NULL); return AssignPointerMap(result);