| Index: src/arm/lithium-codegen-arm.cc
|
| diff --git a/src/arm/lithium-codegen-arm.cc b/src/arm/lithium-codegen-arm.cc
|
| index 6b38fd13ba8846739e243561393d7af13dfbcdc6..9ae6b08dab7824b0af41715c34c5801a37df55b4 100644
|
| --- a/src/arm/lithium-codegen-arm.cc
|
| +++ b/src/arm/lithium-codegen-arm.cc
|
| @@ -2781,9 +2781,6 @@ void LCodeGen::DoInstanceOfKnownGlobal(LInstanceOfKnownGlobal* instr) {
|
| Register temp = ToRegister(instr->temp());
|
| Register result = ToRegister(instr->result());
|
|
|
| - ASSERT(object.is(r0));
|
| - ASSERT(result.is(r0));
|
| -
|
| // A Smi is not instance of anything.
|
| __ JumpIfSmi(object, &false_result);
|
|
|
| @@ -2841,9 +2838,6 @@ void LCodeGen::DoInstanceOfKnownGlobal(LInstanceOfKnownGlobal* instr) {
|
|
|
| void LCodeGen::DoDeferredInstanceOfKnownGlobal(LInstanceOfKnownGlobal* instr,
|
| Label* map_check) {
|
| - Register result = ToRegister(instr->result());
|
| - ASSERT(result.is(r0));
|
| -
|
| InstanceofStub::Flags flags = InstanceofStub::kNoFlags;
|
| flags = static_cast<InstanceofStub::Flags>(
|
| flags | InstanceofStub::kArgsInRegisters);
|
| @@ -2856,37 +2850,32 @@ void LCodeGen::DoDeferredInstanceOfKnownGlobal(LInstanceOfKnownGlobal* instr,
|
| PushSafepointRegistersScope scope(this, Safepoint::kWithRegisters);
|
| LoadContextFromDeferred(instr->context());
|
|
|
| - // Get the temp register reserved by the instruction. This needs to be r4 as
|
| - // its slot of the pushing of safepoint registers is used to communicate the
|
| - // offset to the location of the map check.
|
| - Register temp = ToRegister(instr->temp());
|
| - ASSERT(temp.is(r4));
|
| __ Move(InstanceofStub::right(), instr->function());
|
| - static const int kAdditionalDelta = 5;
|
| + static const int kAdditionalDelta = 4;
|
| // Make sure that code size is predicable, since we use specific constants
|
| // offsets in the code to find embedded values..
|
| - PredictableCodeSizeScope predictable(masm_, 6 * Assembler::kInstrSize);
|
| + PredictableCodeSizeScope predictable(masm_, 5 * Assembler::kInstrSize);
|
| int delta = masm_->InstructionsGeneratedSince(map_check) + kAdditionalDelta;
|
| Label before_push_delta;
|
| __ bind(&before_push_delta);
|
| __ BlockConstPoolFor(kAdditionalDelta);
|
| - __ mov(temp, Operand(delta * kPointerSize));
|
| + // r5 is used to communicate the offset to the location of the map check.
|
| + __ mov(r5, Operand(delta * kPointerSize));
|
| // The mov above can generate one or two instructions. The delta was computed
|
| // for two instructions, so we need to pad here in case of one instruction.
|
| if (masm_->InstructionsGeneratedSince(&before_push_delta) != 2) {
|
| ASSERT_EQ(1, masm_->InstructionsGeneratedSince(&before_push_delta));
|
| __ nop();
|
| }
|
| - __ StoreToSafepointRegisterSlot(temp, temp);
|
| CallCodeGeneric(stub.GetCode(isolate()),
|
| RelocInfo::CODE_TARGET,
|
| instr,
|
| RECORD_SAFEPOINT_WITH_REGISTERS_AND_NO_ARGUMENTS);
|
| LEnvironment* env = instr->GetDeferredLazyDeoptimizationEnvironment();
|
| safepoints_.RecordLazyDeoptimizationIndex(env->deoptimization_index());
|
| - // Put the result value into the result register slot and
|
| + // Put the result value (r0) into the result register slot and
|
| // restore all registers.
|
| - __ StoreToSafepointRegisterSlot(result, result);
|
| + __ StoreToSafepointRegisterSlot(r0, ToRegister(instr->result()));
|
| }
|
|
|
|
|
|
|