diff options
Diffstat (limited to 'deps/v8/src/arm64/lithium-arm64.cc')
-rw-r--r-- | deps/v8/src/arm64/lithium-arm64.cc | 80 |
1 files changed, 53 insertions, 27 deletions
diff --git a/deps/v8/src/arm64/lithium-arm64.cc b/deps/v8/src/arm64/lithium-arm64.cc index a4a36bfa15..fef51c669b 100644 --- a/deps/v8/src/arm64/lithium-arm64.cc +++ b/deps/v8/src/arm64/lithium-arm64.cc @@ -1050,10 +1050,18 @@ LInstruction* LChunkBuilder::DoCallWithDescriptor( LOperand* target = UseRegisterOrConstantAtStart(instr->target()); ZoneList<LOperand*> ops(instr->OperandCount(), zone()); + // Target ops.Add(target, zone()); - for (int i = 1; i < instr->OperandCount(); i++) { - LOperand* op = - UseFixed(instr->OperandAt(i), descriptor.GetParameterRegister(i - 1)); + // Context + LOperand* op = UseFixed(instr->OperandAt(1), cp); + ops.Add(op, zone()); + // Other register parameters + for (int i = LCallWithDescriptor::kImplicitRegisterParameterCount; + i < instr->OperandCount(); i++) { + op = + UseFixed(instr->OperandAt(i), + descriptor.GetRegisterParameter( + i - LCallWithDescriptor::kImplicitRegisterParameterCount)); ops.Add(op, zone()); } @@ -1391,7 +1399,7 @@ LInstruction* LChunkBuilder::DoContext(HContext* instr) { LInstruction* LChunkBuilder::DoDateField(HDateField* instr) { LOperand* object = UseFixed(instr->value(), x0); LDateField* result = new(zone()) LDateField(object, instr->index()); - return MarkAsCall(DefineFixed(result, x0), instr, CAN_DEOPTIMIZE_EAGERLY); + return MarkAsCall(DefineFixed(result, x0), instr, CANNOT_DEOPTIMIZE_EAGERLY); } @@ -1504,7 +1512,7 @@ LInstruction* LChunkBuilder::DoEnterInlined(HEnterInlined* instr) { inner->BindContext(instr->closure_context()); inner->set_entry(instr); current_block_->UpdateEnvironment(inner); - chunk_->AddInlinedClosure(instr->closure()); + chunk_->AddInlinedFunction(instr->shared()); return NULL; } @@ -1588,20 +1596,6 @@ LInstruction* LChunkBuilder::DoInstanceOfKnownGlobal( } -LInstruction* LChunkBuilder::DoTailCallThroughMegamorphicCache( - HTailCallThroughMegamorphicCache* instr) { - LOperand* context = UseFixed(instr->context(), cp); - LOperand* receiver_register = - UseFixed(instr->receiver(), LoadDescriptor::ReceiverRegister()); - LOperand* name_register = - UseFixed(instr->name(), LoadDescriptor::NameRegister()); - - // Not marked as call. It can't deoptimize, and it never returns. - return new (zone()) LTailCallThroughMegamorphicCache( - context, receiver_register, name_register); -} - - LInstruction* LChunkBuilder::DoInvokeFunction(HInvokeFunction* instr) { LOperand* context = UseFixed(instr->context(), cp); // The function is required (by MacroAssembler::InvokeFunction) to be in x1. @@ -1700,7 +1694,7 @@ LInstruction* LChunkBuilder::DoLoadGlobalGeneric(HLoadGlobalGeneric* instr) { UseFixed(instr->global_object(), LoadDescriptor::ReceiverRegister()); LOperand* vector = NULL; if (instr->HasVectorAndSlot()) { - vector = FixedTemp(VectorLoadICDescriptor::VectorRegister()); + vector = FixedTemp(LoadWithVectorDescriptor::VectorRegister()); } LLoadGlobalGeneric* result = @@ -1766,7 +1760,7 @@ LInstruction* LChunkBuilder::DoLoadKeyedGeneric(HLoadKeyedGeneric* instr) { LOperand* key = UseFixed(instr->key(), LoadDescriptor::NameRegister()); LOperand* vector = NULL; if (instr->HasVectorAndSlot()) { - vector = FixedTemp(VectorLoadICDescriptor::VectorRegister()); + vector = FixedTemp(LoadWithVectorDescriptor::VectorRegister()); } LInstruction* result = @@ -1788,7 +1782,7 @@ LInstruction* LChunkBuilder::DoLoadNamedGeneric(HLoadNamedGeneric* instr) { UseFixed(instr->object(), LoadDescriptor::ReceiverRegister()); LOperand* vector = NULL; if (instr->HasVectorAndSlot()) { - vector = FixedTemp(VectorLoadICDescriptor::VectorRegister()); + vector = FixedTemp(LoadWithVectorDescriptor::VectorRegister()); } LInstruction* result = @@ -2028,7 +2022,7 @@ LInstruction* LChunkBuilder::DoParameter(HParameter* instr) { CallInterfaceDescriptor descriptor = info()->code_stub()->GetCallInterfaceDescriptor(); int index = static_cast<int>(instr->index()); - Register reg = descriptor.GetEnvironmentParameterRegister(index); + Register reg = descriptor.GetRegisterParameter(index); return DefineFixed(result, reg); } } @@ -2402,8 +2396,16 @@ LInstruction* LChunkBuilder::DoStoreKeyedGeneric(HStoreKeyedGeneric* instr) { DCHECK(instr->key()->representation().IsTagged()); DCHECK(instr->value()->representation().IsTagged()); - return MarkAsCall( - new(zone()) LStoreKeyedGeneric(context, object, key, value), instr); + LOperand* slot = NULL; + LOperand* vector = NULL; + if (instr->HasVectorAndSlot()) { + slot = FixedTemp(VectorStoreICDescriptor::SlotRegister()); + vector = FixedTemp(VectorStoreICDescriptor::VectorRegister()); + } + + LStoreKeyedGeneric* result = new (zone()) + LStoreKeyedGeneric(context, object, key, value, slot, vector); + return MarkAsCall(result, instr); } @@ -2442,7 +2444,15 @@ LInstruction* LChunkBuilder::DoStoreNamedGeneric(HStoreNamedGeneric* instr) { UseFixed(instr->object(), StoreDescriptor::ReceiverRegister()); LOperand* value = UseFixed(instr->value(), StoreDescriptor::ValueRegister()); - LInstruction* result = new(zone()) LStoreNamedGeneric(context, object, value); + LOperand* slot = NULL; + LOperand* vector = NULL; + if (instr->HasVectorAndSlot()) { + slot = FixedTemp(VectorStoreICDescriptor::SlotRegister()); + vector = FixedTemp(VectorStoreICDescriptor::VectorRegister()); + } + + LStoreNamedGeneric* result = + new (zone()) LStoreNamedGeneric(context, object, value, slot, vector); return MarkAsCall(result, instr); } @@ -2567,6 +2577,21 @@ LInstruction* LChunkBuilder::DoTrapAllocationMemento( } +LInstruction* LChunkBuilder::DoMaybeGrowElements(HMaybeGrowElements* instr) { + info()->MarkAsDeferredCalling(); + LOperand* context = UseFixed(instr->context(), cp); + LOperand* object = UseRegister(instr->object()); + LOperand* elements = UseRegister(instr->elements()); + LOperand* key = UseRegisterOrConstant(instr->key()); + LOperand* current_capacity = UseRegisterOrConstant(instr->current_capacity()); + + LMaybeGrowElements* result = new (zone()) + LMaybeGrowElements(context, object, elements, key, current_capacity); + DefineFixed(result, x0); + return AssignPointerMap(AssignEnvironment(result)); +} + + LInstruction* LChunkBuilder::DoTypeof(HTypeof* instr) { LOperand* context = UseFixed(instr->context(), cp); LOperand* value = UseFixed(instr->value(), x3); @@ -2763,4 +2788,5 @@ LInstruction* LChunkBuilder::DoAllocateBlockContext( } -} } // namespace v8::internal +} // namespace internal +} // namespace v8 |