| Index: src/arm64/lithium-codegen-arm64.cc
|
| diff --git a/src/arm64/lithium-codegen-arm64.cc b/src/arm64/lithium-codegen-arm64.cc
|
| index 3f7644962907b33b4a1f341b146e9cad3398e932..6087a4652df4f3781e9385967b4ba0853811a30e 100644
|
| --- a/src/arm64/lithium-codegen-arm64.cc
|
| +++ b/src/arm64/lithium-codegen-arm64.cc
|
| @@ -435,7 +435,6 @@ void LCodeGen::DoCallFunction(LCallFunction* instr) {
|
| CallFunctionStub stub(isolate(), arity, flags);
|
| CallCode(stub.GetCode(), RelocInfo::CODE_TARGET, instr);
|
| }
|
| - after_push_argument_ = false;
|
| }
|
|
|
|
|
| @@ -450,7 +449,6 @@ void LCodeGen::DoCallNew(LCallNew* instr) {
|
|
|
| CallConstructStub stub(isolate(), NO_CALL_CONSTRUCTOR_FLAGS);
|
| CallCode(stub.GetCode(), RelocInfo::CONSTRUCT_CALL, instr);
|
| - after_push_argument_ = false;
|
|
|
| DCHECK(ToRegister(instr->result()).is(x0));
|
| }
|
| @@ -498,7 +496,6 @@ void LCodeGen::DoCallNewArray(LCallNewArray* instr) {
|
| ArrayNArgumentsConstructorStub stub(isolate(), kind, override_mode);
|
| CallCode(stub.GetCode(), RelocInfo::CONSTRUCT_CALL, instr);
|
| }
|
| - after_push_argument_ = false;
|
|
|
| DCHECK(ToRegister(instr->result()).is(x0));
|
| }
|
| @@ -520,7 +517,7 @@ void LCodeGen::LoadContextFromDeferred(LOperand* context) {
|
| if (context->IsRegister()) {
|
| __ Mov(cp, ToRegister(context));
|
| } else if (context->IsStackSlot()) {
|
| - __ Ldr(cp, ToMemOperand(context, kMustUseFramePointer));
|
| + __ Ldr(cp, ToMemOperand(context));
|
| } else if (context->IsConstantOperand()) {
|
| HConstant* constant =
|
| chunk_->LookupConstant(LConstantOperand::cast(context));
|
| @@ -1275,38 +1272,13 @@ static int64_t ArgumentsOffsetWithoutFrame(int index) {
|
| }
|
|
|
|
|
| -MemOperand LCodeGen::ToMemOperand(LOperand* op, StackMode stack_mode) const {
|
| +MemOperand LCodeGen::ToMemOperand(LOperand* op) const {
|
| DCHECK(op != NULL);
|
| DCHECK(!op->IsRegister());
|
| DCHECK(!op->IsDoubleRegister());
|
| DCHECK(op->IsStackSlot() || op->IsDoubleStackSlot());
|
| if (NeedsEagerFrame()) {
|
| - int fp_offset = StackSlotOffset(op->index());
|
| - if (op->index() >= 0) {
|
| - // Loads and stores have a bigger reach in positive offset than negative.
|
| - // When the load or the store can't be done in one instruction via fp
|
| - // (too big negative offset), we try to access via jssp (positive offset).
|
| - // We can reference a stack slot from jssp only if jssp references the end
|
| - // of the stack slots. It's not the case when:
|
| - // - stack_mode != kCanUseStackPointer: this is the case when a deferred
|
| - // code saved the registers.
|
| - // - after_push_argument_: arguments has been pushed for a call.
|
| - // - inlined_arguments_: inlined arguments have been pushed once. All the
|
| - // remainder of the function cannot trust jssp any longer.
|
| - // - saves_caller_doubles: some double registers have been pushed, jssp
|
| - // references the end of the double registers and not the end of the
|
| - // stack slots.
|
| - // Also, if the offset from fp is small enough to make a load/store in
|
| - // one instruction, we use a fp access.
|
| - if ((stack_mode == kCanUseStackPointer) && !after_push_argument_ &&
|
| - !inlined_arguments_ && !is_int9(fp_offset) &&
|
| - !info()->saves_caller_doubles()) {
|
| - int jssp_offset =
|
| - (GetStackSlotCount() - op->index() - 1) * kPointerSize;
|
| - return MemOperand(masm()->StackPointer(), jssp_offset);
|
| - }
|
| - }
|
| - return MemOperand(fp, fp_offset);
|
| + return MemOperand(fp, StackSlotOffset(op->index()));
|
| } else {
|
| // Retrieve parameter without eager stack-frame relative to the
|
| // stack-pointer.
|
| @@ -1710,10 +1682,6 @@ void LCodeGen::DoApplyArguments(LApplyArguments* instr) {
|
|
|
|
|
| void LCodeGen::DoArgumentsElements(LArgumentsElements* instr) {
|
| - // We push some arguments and they will be pop in an other block. We can't
|
| - // trust that jssp references the end of the stack slots until the end of
|
| - // the function.
|
| - inlined_arguments_ = true;
|
| Register result = ToRegister(instr->result());
|
|
|
| if (instr->hydrogen()->from_inlined()) {
|
| @@ -2130,8 +2098,6 @@ void LCodeGen::DoCallWithDescriptor(LCallWithDescriptor* instr) {
|
| }
|
| generator.AfterCall();
|
| }
|
| -
|
| - after_push_argument_ = false;
|
| }
|
|
|
|
|
| @@ -2151,13 +2117,11 @@ void LCodeGen::DoCallJSFunction(LCallJSFunction* instr) {
|
| __ Call(x10);
|
|
|
| RecordSafepointWithLazyDeopt(instr, RECORD_SIMPLE_SAFEPOINT);
|
| - after_push_argument_ = false;
|
| }
|
|
|
|
|
| void LCodeGen::DoCallRuntime(LCallRuntime* instr) {
|
| CallRuntime(instr->function(), instr->arity(), instr);
|
| - after_push_argument_ = false;
|
| }
|
|
|
|
|
| @@ -2183,7 +2147,6 @@ void LCodeGen::DoCallStub(LCallStub* instr) {
|
| default:
|
| UNREACHABLE();
|
| }
|
| - after_push_argument_ = false;
|
| }
|
|
|
|
|
| @@ -3239,7 +3202,6 @@ void LCodeGen::DoInvokeFunction(LInvokeFunction* instr) {
|
| instr->hydrogen()->formal_parameter_count(),
|
| instr->arity(), instr);
|
| }
|
| - after_push_argument_ = false;
|
| }
|
|
|
|
|
| @@ -4781,8 +4743,6 @@ void LCodeGen::DoPushArguments(LPushArguments* instr) {
|
|
|
| // The preamble was done by LPreparePushArguments.
|
| args.PushQueued(MacroAssembler::PushPopQueue::SKIP_PREAMBLE);
|
| -
|
| - after_push_argument_ = true;
|
| }
|
|
|
|
|
|
|