| Index: src/arm/lithium-codegen-arm.h
|
| diff --git a/src/arm/lithium-codegen-arm.h b/src/arm/lithium-codegen-arm.h
|
| index d0bfcbbb94e102d44f0bde49ffa3464b5b3e5496..e5688dd00939f35ddfd8f0a5f67a3fbcff13bcd7 100644
|
| --- a/src/arm/lithium-codegen-arm.h
|
| +++ b/src/arm/lithium-codegen-arm.h
|
| @@ -64,6 +64,7 @@ class LCodeGen BASE_EMBEDDED {
|
| osr_pc_offset_(-1),
|
| last_lazy_deopt_pc_(0),
|
| frame_is_built_(false),
|
| + fp_sp_delta_(-1),
|
| safepoints_(info->zone()),
|
| resolver_(this),
|
| expected_safepoint_kind_(Safepoint::kSimple),
|
| @@ -232,15 +233,28 @@ class LCodeGen BASE_EMBEDDED {
|
| RECORD_SAFEPOINT_WITH_REGISTERS_AND_NO_ARGUMENTS
|
| };
|
|
|
| + void SetFpSpDelta(int argument_count);
|
| +
|
| + void Push(Register src1);
|
| + void Push(Register src1, Register src2);
|
| + void Push(Register src1, Register src2, Register src3);
|
| + void Push(Register src1, Register src2, Register src3, Register src4);
|
| +
|
| +#ifdef DEBUG
|
| + void CheckFpSpDelta(LInstruction* instr);
|
| +#endif // DEBUG
|
| +
|
| void CallCode(
|
| Handle<Code> code,
|
| RelocInfo::Mode mode,
|
| + int num_arguments,
|
| LInstruction* instr,
|
| TargetAddressStorageMode storage_mode = CAN_INLINE_TARGET_ADDRESS);
|
|
|
| void CallCodeGeneric(
|
| Handle<Code> code,
|
| RelocInfo::Mode mode,
|
| + int num_arguments,
|
| LInstruction* instr,
|
| SafepointMode safepoint_mode,
|
| TargetAddressStorageMode storage_mode = CAN_INLINE_TARGET_ADDRESS);
|
| @@ -408,6 +422,7 @@ class LCodeGen BASE_EMBEDDED {
|
| int osr_pc_offset_;
|
| int last_lazy_deopt_pc_;
|
| bool frame_is_built_;
|
| + int fp_sp_delta_;
|
|
|
| // Builder that keeps track of safepoints in the code. The table
|
| // itself is emitted at the end of the generated code.
|
| @@ -432,9 +447,12 @@ class LCodeGen BASE_EMBEDDED {
|
| switch (codegen_->expected_safepoint_kind_) {
|
| case Safepoint::kWithRegisters:
|
| codegen_->masm_->PushSafepointRegisters();
|
| - break;
|
| + codegen_->fp_sp_delta_ += kNumSafepointSavedRegisters * kPointerSize;
|
| + break;
|
| case Safepoint::kWithRegistersAndDoubles:
|
| codegen_->masm_->PushSafepointRegistersAndDoubles();
|
| + codegen_->fp_sp_delta_ += kNumSafepointSavedRegisters * kPointerSize
|
| + + DwVfpRegister::NumAllocatableRegisters() * kDoubleSize;
|
| break;
|
| default:
|
| UNREACHABLE();
|
| @@ -447,9 +465,12 @@ class LCodeGen BASE_EMBEDDED {
|
| switch (kind) {
|
| case Safepoint::kWithRegisters:
|
| codegen_->masm_->PopSafepointRegisters();
|
| + codegen_->fp_sp_delta_ -= kNumSafepointRegisters * kPointerSize;
|
| break;
|
| case Safepoint::kWithRegistersAndDoubles:
|
| codegen_->masm_->PopSafepointRegistersAndDoubles();
|
| + codegen_->fp_sp_delta_ -= kNumSafepointSavedRegisters * kPointerSize
|
| + + DwVfpRegister::NumAllocatableRegisters() * kDoubleSize;
|
| break;
|
| default:
|
| UNREACHABLE();
|
|
|