OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #if V8_TARGET_ARCH_ARM64 | 7 #if V8_TARGET_ARCH_ARM64 |
8 | 8 |
9 #include "src/bootstrapper.h" | 9 #include "src/bootstrapper.h" |
10 #include "src/code-stubs.h" | 10 #include "src/code-stubs.h" |
(...skipping 4484 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4495 } | 4495 } |
4496 | 4496 |
4497 | 4497 |
4498 void VectorRawLoadStub::GenerateForTrampoline(MacroAssembler* masm) { | 4498 void VectorRawLoadStub::GenerateForTrampoline(MacroAssembler* masm) { |
4499 GenerateImpl(masm, true); | 4499 GenerateImpl(masm, true); |
4500 } | 4500 } |
4501 | 4501 |
4502 | 4502 |
4503 static void HandleArrayCases(MacroAssembler* masm, Register receiver, | 4503 static void HandleArrayCases(MacroAssembler* masm, Register receiver, |
4504 Register key, Register vector, Register slot, | 4504 Register key, Register vector, Register slot, |
4505 Register feedback, Register scratch1, | 4505 Register feedback, Register receiver_map, |
4506 Register scratch2, Register scratch3, | 4506 Register scratch1, Register scratch2, |
4507 bool is_polymorphic, Label* miss) { | 4507 bool is_polymorphic, Label* miss) { |
4508 // feedback initially contains the feedback array | 4508 // feedback initially contains the feedback array |
4509 Label next_loop, prepare_next; | 4509 Label next_loop, prepare_next; |
4510 Label load_smi_map, compare_map; | 4510 Label load_smi_map, compare_map; |
4511 Label start_polymorphic; | 4511 Label start_polymorphic; |
4512 | 4512 |
4513 Register receiver_map = scratch1; | 4513 Register cached_map = scratch1; |
4514 Register cached_map = scratch2; | |
4515 | 4514 |
4516 // Receiver might not be a heap object. | |
4517 __ JumpIfSmi(receiver, &load_smi_map); | |
4518 __ Ldr(receiver_map, FieldMemOperand(receiver, HeapObject::kMapOffset)); | |
4519 __ Bind(&compare_map); | |
4520 __ Ldr(cached_map, | 4515 __ Ldr(cached_map, |
4521 FieldMemOperand(feedback, FixedArray::OffsetOfElementAt(0))); | 4516 FieldMemOperand(feedback, FixedArray::OffsetOfElementAt(0))); |
4522 __ Ldr(cached_map, FieldMemOperand(cached_map, WeakCell::kValueOffset)); | 4517 __ Ldr(cached_map, FieldMemOperand(cached_map, WeakCell::kValueOffset)); |
4523 __ Cmp(receiver_map, cached_map); | 4518 __ Cmp(receiver_map, cached_map); |
4524 __ B(ne, &start_polymorphic); | 4519 __ B(ne, &start_polymorphic); |
4525 // found, now call handler. | 4520 // found, now call handler. |
4526 Register handler = feedback; | 4521 Register handler = feedback; |
4527 __ Ldr(handler, FieldMemOperand(feedback, FixedArray::OffsetOfElementAt(1))); | 4522 __ Ldr(handler, FieldMemOperand(feedback, FixedArray::OffsetOfElementAt(1))); |
4528 __ Add(handler, handler, Code::kHeaderSize - kHeapObjectTag); | 4523 __ Add(handler, handler, Code::kHeaderSize - kHeapObjectTag); |
4529 __ Jump(feedback); | 4524 __ Jump(feedback); |
4530 | 4525 |
4531 Register length = scratch3; | 4526 Register length = scratch2; |
4532 __ Bind(&start_polymorphic); | 4527 __ Bind(&start_polymorphic); |
4533 __ Ldr(length, FieldMemOperand(feedback, FixedArray::kLengthOffset)); | 4528 __ Ldr(length, FieldMemOperand(feedback, FixedArray::kLengthOffset)); |
4534 if (!is_polymorphic) { | 4529 if (!is_polymorphic) { |
4535 __ Cmp(length, Operand(Smi::FromInt(2))); | 4530 __ Cmp(length, Operand(Smi::FromInt(2))); |
4536 __ B(eq, miss); | 4531 __ B(eq, miss); |
4537 } | 4532 } |
4538 | 4533 |
4539 Register too_far = length; | 4534 Register too_far = length; |
4540 Register pointer_reg = feedback; | 4535 Register pointer_reg = feedback; |
4541 | 4536 |
4542 // +-----+------+------+-----+-----+ ... ----+ | 4537 // +-----+------+------+-----+-----+ ... ----+ |
4543 // | map | len | wm0 | h0 | wm1 | hN | | 4538 // | map | len | wm0 | h0 | wm1 | hN | |
4544 // +-----+------+------+-----+-----+ ... ----+ | 4539 // +-----+------+------+-----+-----+ ... ----+ |
4545 // 0 1 2 len-1 | 4540 // 0 1 2 len-1 |
4546 // ^ ^ | 4541 // ^ ^ |
4547 // | | | 4542 // | | |
4548 // pointer_reg too_far | 4543 // pointer_reg too_far |
4549 // aka feedback scratch3 | 4544 // aka feedback scratch2 |
4550 // also need receiver_map (aka scratch1) | 4545 // also need receiver_map |
4551 // use cached_map (scratch2) to look in the weak map values. | 4546 // use cached_map (scratch1) to look in the weak map values. |
4552 __ Add(too_far, feedback, | 4547 __ Add(too_far, feedback, |
4553 Operand::UntagSmiAndScale(length, kPointerSizeLog2)); | 4548 Operand::UntagSmiAndScale(length, kPointerSizeLog2)); |
4554 __ Add(too_far, too_far, FixedArray::kHeaderSize - kHeapObjectTag); | 4549 __ Add(too_far, too_far, FixedArray::kHeaderSize - kHeapObjectTag); |
4555 __ Add(pointer_reg, feedback, | 4550 __ Add(pointer_reg, feedback, |
4556 FixedArray::OffsetOfElementAt(2) - kHeapObjectTag); | 4551 FixedArray::OffsetOfElementAt(2) - kHeapObjectTag); |
4557 | 4552 |
4558 __ Bind(&next_loop); | 4553 __ Bind(&next_loop); |
4559 __ Ldr(cached_map, MemOperand(pointer_reg)); | 4554 __ Ldr(cached_map, MemOperand(pointer_reg)); |
4560 __ Ldr(cached_map, FieldMemOperand(cached_map, WeakCell::kValueOffset)); | 4555 __ Ldr(cached_map, FieldMemOperand(cached_map, WeakCell::kValueOffset)); |
4561 __ Cmp(receiver_map, cached_map); | 4556 __ Cmp(receiver_map, cached_map); |
4562 __ B(ne, &prepare_next); | 4557 __ B(ne, &prepare_next); |
4563 __ Ldr(handler, MemOperand(pointer_reg, kPointerSize)); | 4558 __ Ldr(handler, MemOperand(pointer_reg, kPointerSize)); |
4564 __ Add(handler, handler, Code::kHeaderSize - kHeapObjectTag); | 4559 __ Add(handler, handler, Code::kHeaderSize - kHeapObjectTag); |
4565 __ Jump(handler); | 4560 __ Jump(handler); |
4566 | 4561 |
4567 __ Bind(&prepare_next); | 4562 __ Bind(&prepare_next); |
4568 __ Add(pointer_reg, pointer_reg, kPointerSize * 2); | 4563 __ Add(pointer_reg, pointer_reg, kPointerSize * 2); |
4569 __ Cmp(pointer_reg, too_far); | 4564 __ Cmp(pointer_reg, too_far); |
4570 __ B(lt, &next_loop); | 4565 __ B(lt, &next_loop); |
4571 | 4566 |
4572 // We exhausted our array of map handler pairs. | 4567 // We exhausted our array of map handler pairs. |
4573 __ jmp(miss); | 4568 __ jmp(miss); |
4574 | |
4575 __ Bind(&load_smi_map); | |
4576 __ LoadRoot(receiver_map, Heap::kHeapNumberMapRootIndex); | |
4577 __ jmp(&compare_map); | |
4578 } | 4569 } |
4579 | 4570 |
4580 | 4571 |
4581 static void HandleMonomorphicCase(MacroAssembler* masm, Register receiver, | 4572 static void HandleMonomorphicCase(MacroAssembler* masm, Register receiver, |
4582 Register key, Register vector, Register slot, | 4573 Register receiver_map, Register feedback, |
4583 Register weak_cell, Register scratch, | 4574 Register vector, Register slot, |
4584 Label* miss) { | 4575 Register scratch, Label* compare_map, |
4585 // feedback initially contains the feedback array | 4576 Label* load_smi_map, Label* try_array) { |
4586 Label compare_smi_map; | 4577 __ JumpIfSmi(receiver, load_smi_map); |
4587 Register receiver_map = scratch; | 4578 __ Ldr(receiver_map, FieldMemOperand(receiver, HeapObject::kMapOffset)); |
4588 Register cached_map = weak_cell; | 4579 __ bind(compare_map); |
| 4580 Register cached_map = scratch; |
| 4581 // Move the weak map into the weak_cell register. |
| 4582 __ Ldr(cached_map, FieldMemOperand(feedback, WeakCell::kValueOffset)); |
| 4583 __ Cmp(cached_map, receiver_map); |
| 4584 __ B(ne, try_array); |
4589 | 4585 |
4590 // Move the weak map into the weak_cell register. | 4586 Register handler = feedback; |
4591 __ Ldr(cached_map, FieldMemOperand(weak_cell, WeakCell::kValueOffset)); | |
4592 | |
4593 // Receiver might not be a heap object. | |
4594 __ JumpIfSmi(receiver, &compare_smi_map); | |
4595 __ Ldr(receiver_map, FieldMemOperand(receiver, HeapObject::kMapOffset)); | |
4596 __ Cmp(cached_map, receiver_map); | |
4597 __ B(ne, miss); | |
4598 | |
4599 Register handler = weak_cell; | |
4600 __ Add(handler, vector, Operand::UntagSmiAndScale(slot, kPointerSizeLog2)); | 4587 __ Add(handler, vector, Operand::UntagSmiAndScale(slot, kPointerSizeLog2)); |
4601 __ Ldr(handler, | 4588 __ Ldr(handler, |
4602 FieldMemOperand(handler, FixedArray::kHeaderSize + kPointerSize)); | 4589 FieldMemOperand(handler, FixedArray::kHeaderSize + kPointerSize)); |
4603 __ Add(handler, handler, Code::kHeaderSize - kHeapObjectTag); | |
4604 __ Jump(weak_cell); | |
4605 | |
4606 // In microbenchmarks, it made sense to unroll this code so that the call to | |
4607 // the handler is duplicated for a HeapObject receiver and a Smi receiver. | |
4608 // TODO(mvstanton): does this hold on ARM? | |
4609 __ Bind(&compare_smi_map); | |
4610 __ JumpIfNotRoot(weak_cell, Heap::kHeapNumberMapRootIndex, miss); | |
4611 __ Add(handler, vector, Operand::UntagSmiAndScale(slot, kPointerSizeLog2)); | |
4612 __ Ldr(handler, | |
4613 FieldMemOperand(handler, FixedArray::kHeaderSize + kPointerSize)); | |
4614 __ Add(handler, handler, Code::kHeaderSize - kHeapObjectTag); | 4590 __ Add(handler, handler, Code::kHeaderSize - kHeapObjectTag); |
4615 __ Jump(handler); | 4591 __ Jump(handler); |
4616 } | 4592 } |
4617 | 4593 |
4618 | 4594 |
4619 void VectorRawLoadStub::GenerateImpl(MacroAssembler* masm, bool in_frame) { | 4595 void VectorRawLoadStub::GenerateImpl(MacroAssembler* masm, bool in_frame) { |
4620 Register receiver = VectorLoadICDescriptor::ReceiverRegister(); // x1 | 4596 Register receiver = VectorLoadICDescriptor::ReceiverRegister(); // x1 |
4621 Register name = VectorLoadICDescriptor::NameRegister(); // x2 | 4597 Register name = VectorLoadICDescriptor::NameRegister(); // x2 |
4622 Register vector = VectorLoadICDescriptor::VectorRegister(); // x3 | 4598 Register vector = VectorLoadICDescriptor::VectorRegister(); // x3 |
4623 Register slot = VectorLoadICDescriptor::SlotRegister(); // x0 | 4599 Register slot = VectorLoadICDescriptor::SlotRegister(); // x0 |
4624 Register feedback = x4; | 4600 Register feedback = x4; |
4625 Register scratch1 = x5; | 4601 Register receiver_map = x5; |
| 4602 Register scratch1 = x6; |
4626 | 4603 |
4627 __ Add(feedback, vector, Operand::UntagSmiAndScale(slot, kPointerSizeLog2)); | 4604 __ Add(feedback, vector, Operand::UntagSmiAndScale(slot, kPointerSizeLog2)); |
4628 __ Ldr(feedback, FieldMemOperand(feedback, FixedArray::kHeaderSize)); | 4605 __ Ldr(feedback, FieldMemOperand(feedback, FixedArray::kHeaderSize)); |
4629 | 4606 |
4630 // Is it a weak cell? | 4607 // Try to quickly handle the monomorphic case without knowing for sure |
4631 Label try_array; | 4608 // if we have a weak cell in feedback. We do know it's safe to look |
4632 Label not_array, smi_key, key_okay, miss; | 4609 // at WeakCell::kValueOffset. |
4633 __ Ldr(scratch1, FieldMemOperand(feedback, HeapObject::kMapOffset)); | 4610 Label try_array, load_smi_map, compare_map; |
4634 __ JumpIfNotRoot(scratch1, Heap::kWeakCellMapRootIndex, &try_array); | 4611 Label not_array, miss; |
4635 HandleMonomorphicCase(masm, receiver, name, vector, slot, feedback, scratch1, | 4612 HandleMonomorphicCase(masm, receiver, receiver_map, feedback, vector, slot, |
4636 &miss); | 4613 scratch1, &compare_map, &load_smi_map, &try_array); |
4637 | 4614 |
4638 // Is it a fixed array? | 4615 // Is it a fixed array? |
4639 __ Bind(&try_array); | 4616 __ Bind(&try_array); |
| 4617 __ Ldr(scratch1, FieldMemOperand(feedback, HeapObject::kMapOffset)); |
4640 __ JumpIfNotRoot(scratch1, Heap::kFixedArrayMapRootIndex, ¬_array); | 4618 __ JumpIfNotRoot(scratch1, Heap::kFixedArrayMapRootIndex, ¬_array); |
4641 HandleArrayCases(masm, receiver, name, vector, slot, feedback, scratch1, x6, | 4619 HandleArrayCases(masm, receiver, name, vector, slot, feedback, receiver_map, |
4642 x7, true, &miss); | 4620 scratch1, x7, true, &miss); |
4643 | 4621 |
4644 __ Bind(¬_array); | 4622 __ Bind(¬_array); |
4645 __ JumpIfNotRoot(feedback, Heap::kmegamorphic_symbolRootIndex, &miss); | 4623 __ JumpIfNotRoot(feedback, Heap::kmegamorphic_symbolRootIndex, &miss); |
4646 Code::Flags code_flags = Code::RemoveTypeAndHolderFromFlags( | 4624 Code::Flags code_flags = Code::RemoveTypeAndHolderFromFlags( |
4647 Code::ComputeHandlerFlags(Code::LOAD_IC)); | 4625 Code::ComputeHandlerFlags(Code::LOAD_IC)); |
4648 masm->isolate()->stub_cache()->GenerateProbe(masm, Code::LOAD_IC, code_flags, | 4626 masm->isolate()->stub_cache()->GenerateProbe(masm, Code::LOAD_IC, code_flags, |
4649 false, receiver, name, feedback, | 4627 false, receiver, name, feedback, |
4650 scratch1, x6, x7); | 4628 receiver_map, scratch1, x7); |
4651 | 4629 |
4652 __ Bind(&miss); | 4630 __ Bind(&miss); |
4653 LoadIC::GenerateMiss(masm); | 4631 LoadIC::GenerateMiss(masm); |
| 4632 |
| 4633 __ Bind(&load_smi_map); |
| 4634 __ LoadRoot(receiver_map, Heap::kHeapNumberMapRootIndex); |
| 4635 __ jmp(&compare_map); |
4654 } | 4636 } |
4655 | 4637 |
4656 | 4638 |
4657 void VectorRawKeyedLoadStub::Generate(MacroAssembler* masm) { | 4639 void VectorRawKeyedLoadStub::Generate(MacroAssembler* masm) { |
4658 GenerateImpl(masm, false); | 4640 GenerateImpl(masm, false); |
4659 } | 4641 } |
4660 | 4642 |
4661 | 4643 |
4662 void VectorRawKeyedLoadStub::GenerateForTrampoline(MacroAssembler* masm) { | 4644 void VectorRawKeyedLoadStub::GenerateForTrampoline(MacroAssembler* masm) { |
4663 GenerateImpl(masm, true); | 4645 GenerateImpl(masm, true); |
4664 } | 4646 } |
4665 | 4647 |
4666 | 4648 |
4667 void VectorRawKeyedLoadStub::GenerateImpl(MacroAssembler* masm, bool in_frame) { | 4649 void VectorRawKeyedLoadStub::GenerateImpl(MacroAssembler* masm, bool in_frame) { |
4668 Register receiver = VectorLoadICDescriptor::ReceiverRegister(); // x1 | 4650 Register receiver = VectorLoadICDescriptor::ReceiverRegister(); // x1 |
4669 Register key = VectorLoadICDescriptor::NameRegister(); // x2 | 4651 Register key = VectorLoadICDescriptor::NameRegister(); // x2 |
4670 Register vector = VectorLoadICDescriptor::VectorRegister(); // x3 | 4652 Register vector = VectorLoadICDescriptor::VectorRegister(); // x3 |
4671 Register slot = VectorLoadICDescriptor::SlotRegister(); // x0 | 4653 Register slot = VectorLoadICDescriptor::SlotRegister(); // x0 |
4672 Register feedback = x4; | 4654 Register feedback = x4; |
4673 Register scratch1 = x5; | 4655 Register receiver_map = x5; |
| 4656 Register scratch1 = x6; |
4674 | 4657 |
4675 __ Add(feedback, vector, Operand::UntagSmiAndScale(slot, kPointerSizeLog2)); | 4658 __ Add(feedback, vector, Operand::UntagSmiAndScale(slot, kPointerSizeLog2)); |
4676 __ Ldr(feedback, FieldMemOperand(feedback, FixedArray::kHeaderSize)); | 4659 __ Ldr(feedback, FieldMemOperand(feedback, FixedArray::kHeaderSize)); |
4677 | 4660 |
4678 // Is it a weak cell? | 4661 // Try to quickly handle the monomorphic case without knowing for sure |
4679 Label try_array; | 4662 // if we have a weak cell in feedback. We do know it's safe to look |
4680 Label not_array, smi_key, key_okay, miss; | 4663 // at WeakCell::kValueOffset. |
4681 __ Ldr(scratch1, FieldMemOperand(feedback, HeapObject::kMapOffset)); | 4664 Label try_array, load_smi_map, compare_map; |
4682 __ JumpIfNotRoot(scratch1, Heap::kWeakCellMapRootIndex, &try_array); | 4665 Label not_array, miss; |
4683 HandleMonomorphicCase(masm, receiver, key, vector, slot, feedback, scratch1, | 4666 HandleMonomorphicCase(masm, receiver, receiver_map, feedback, vector, slot, |
4684 &miss); | 4667 scratch1, &compare_map, &load_smi_map, &try_array); |
4685 | 4668 |
4686 __ Bind(&try_array); | 4669 __ Bind(&try_array); |
4687 // Is it a fixed array? | 4670 // Is it a fixed array? |
| 4671 __ Ldr(scratch1, FieldMemOperand(feedback, HeapObject::kMapOffset)); |
4688 __ JumpIfNotRoot(scratch1, Heap::kFixedArrayMapRootIndex, ¬_array); | 4672 __ JumpIfNotRoot(scratch1, Heap::kFixedArrayMapRootIndex, ¬_array); |
4689 | 4673 |
4690 // We have a polymorphic element handler. | 4674 // We have a polymorphic element handler. |
4691 Label polymorphic, try_poly_name; | 4675 Label polymorphic, try_poly_name; |
4692 __ Bind(&polymorphic); | 4676 __ Bind(&polymorphic); |
4693 HandleArrayCases(masm, receiver, key, vector, slot, feedback, scratch1, x6, | 4677 HandleArrayCases(masm, receiver, key, vector, slot, feedback, receiver_map, |
4694 x7, true, &miss); | 4678 scratch1, x7, true, &miss); |
4695 | 4679 |
4696 __ Bind(¬_array); | 4680 __ Bind(¬_array); |
4697 // Is it generic? | 4681 // Is it generic? |
4698 __ JumpIfNotRoot(feedback, Heap::kmegamorphic_symbolRootIndex, | 4682 __ JumpIfNotRoot(feedback, Heap::kmegamorphic_symbolRootIndex, |
4699 &try_poly_name); | 4683 &try_poly_name); |
4700 Handle<Code> megamorphic_stub = | 4684 Handle<Code> megamorphic_stub = |
4701 KeyedLoadIC::ChooseMegamorphicStub(masm->isolate()); | 4685 KeyedLoadIC::ChooseMegamorphicStub(masm->isolate()); |
4702 __ Jump(megamorphic_stub, RelocInfo::CODE_TARGET); | 4686 __ Jump(megamorphic_stub, RelocInfo::CODE_TARGET); |
4703 | 4687 |
4704 __ Bind(&try_poly_name); | 4688 __ Bind(&try_poly_name); |
4705 // We might have a name in feedback, and a fixed array in the next slot. | 4689 // We might have a name in feedback, and a fixed array in the next slot. |
4706 __ Cmp(key, feedback); | 4690 __ Cmp(key, feedback); |
4707 __ B(ne, &miss); | 4691 __ B(ne, &miss); |
4708 // If the name comparison succeeded, we know we have a fixed array with | 4692 // If the name comparison succeeded, we know we have a fixed array with |
4709 // at least one map/handler pair. | 4693 // at least one map/handler pair. |
4710 __ Add(feedback, vector, Operand::UntagSmiAndScale(slot, kPointerSizeLog2)); | 4694 __ Add(feedback, vector, Operand::UntagSmiAndScale(slot, kPointerSizeLog2)); |
4711 __ Ldr(feedback, | 4695 __ Ldr(feedback, |
4712 FieldMemOperand(feedback, FixedArray::kHeaderSize + kPointerSize)); | 4696 FieldMemOperand(feedback, FixedArray::kHeaderSize + kPointerSize)); |
4713 HandleArrayCases(masm, receiver, key, vector, slot, feedback, scratch1, x6, | 4697 HandleArrayCases(masm, receiver, key, vector, slot, feedback, receiver_map, |
4714 x7, false, &miss); | 4698 scratch1, x7, false, &miss); |
4715 | 4699 |
4716 __ Bind(&miss); | 4700 __ Bind(&miss); |
4717 KeyedLoadIC::GenerateMiss(masm); | 4701 KeyedLoadIC::GenerateMiss(masm); |
| 4702 |
| 4703 __ Bind(&load_smi_map); |
| 4704 __ LoadRoot(receiver_map, Heap::kHeapNumberMapRootIndex); |
| 4705 __ jmp(&compare_map); |
4718 } | 4706 } |
4719 | 4707 |
4720 | 4708 |
4721 // The entry hook is a "BumpSystemStackPointer" instruction (sub), followed by | 4709 // The entry hook is a "BumpSystemStackPointer" instruction (sub), followed by |
4722 // a "Push lr" instruction, followed by a call. | 4710 // a "Push lr" instruction, followed by a call. |
4723 static const unsigned int kProfileEntryHookCallSize = | 4711 static const unsigned int kProfileEntryHookCallSize = |
4724 Assembler::kCallSizeWithRelocation + (2 * kInstructionSize); | 4712 Assembler::kCallSizeWithRelocation + (2 * kInstructionSize); |
4725 | 4713 |
4726 | 4714 |
4727 void ProfileEntryHookStub::MaybeCallEntryHook(MacroAssembler* masm) { | 4715 void ProfileEntryHookStub::MaybeCallEntryHook(MacroAssembler* masm) { |
(...skipping 1027 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5755 kStackUnwindSpace, NULL, spill_offset, | 5743 kStackUnwindSpace, NULL, spill_offset, |
5756 MemOperand(fp, 6 * kPointerSize), NULL); | 5744 MemOperand(fp, 6 * kPointerSize), NULL); |
5757 } | 5745 } |
5758 | 5746 |
5759 | 5747 |
5760 #undef __ | 5748 #undef __ |
5761 | 5749 |
5762 } } // namespace v8::internal | 5750 } } // namespace v8::internal |
5763 | 5751 |
5764 #endif // V8_TARGET_ARCH_ARM64 | 5752 #endif // V8_TARGET_ARCH_ARM64 |
OLD | NEW |