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 #include "src/arm64/lithium-codegen-arm64.h" | 7 #include "src/arm64/lithium-codegen-arm64.h" |
8 #include "src/arm64/lithium-gap-resolver-arm64.h" | 8 #include "src/arm64/lithium-gap-resolver-arm64.h" |
9 #include "src/base/bits.h" | 9 #include "src/base/bits.h" |
10 #include "src/code-factory.h" | 10 #include "src/code-factory.h" |
(...skipping 1534 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1545 Register result = ToRegister(instr->result()); | 1545 Register result = ToRegister(instr->result()); |
1546 Register temp1 = ToRegister(instr->temp1()); | 1546 Register temp1 = ToRegister(instr->temp1()); |
1547 Register temp2 = ToRegister(instr->temp2()); | 1547 Register temp2 = ToRegister(instr->temp2()); |
1548 | 1548 |
1549 // Allocate memory for the object. | 1549 // Allocate memory for the object. |
1550 AllocationFlags flags = TAG_OBJECT; | 1550 AllocationFlags flags = TAG_OBJECT; |
1551 if (instr->hydrogen()->MustAllocateDoubleAligned()) { | 1551 if (instr->hydrogen()->MustAllocateDoubleAligned()) { |
1552 flags = static_cast<AllocationFlags>(flags | DOUBLE_ALIGNMENT); | 1552 flags = static_cast<AllocationFlags>(flags | DOUBLE_ALIGNMENT); |
1553 } | 1553 } |
1554 | 1554 |
1555 if (instr->hydrogen()->IsOldPointerSpaceAllocation()) { | 1555 if (instr->hydrogen()->IsOldSpaceAllocation()) { |
1556 DCHECK(!instr->hydrogen()->IsOldDataSpaceAllocation()); | |
1557 DCHECK(!instr->hydrogen()->IsNewSpaceAllocation()); | 1556 DCHECK(!instr->hydrogen()->IsNewSpaceAllocation()); |
1558 flags = static_cast<AllocationFlags>(flags | PRETENURE_OLD_POINTER_SPACE); | 1557 flags = static_cast<AllocationFlags>(flags | PRETENURE); |
1559 } else if (instr->hydrogen()->IsOldDataSpaceAllocation()) { | |
1560 DCHECK(!instr->hydrogen()->IsNewSpaceAllocation()); | |
1561 flags = static_cast<AllocationFlags>(flags | PRETENURE_OLD_DATA_SPACE); | |
1562 } | 1558 } |
1563 | 1559 |
1564 if (instr->size()->IsConstantOperand()) { | 1560 if (instr->size()->IsConstantOperand()) { |
1565 int32_t size = ToInteger32(LConstantOperand::cast(instr->size())); | 1561 int32_t size = ToInteger32(LConstantOperand::cast(instr->size())); |
1566 if (size <= Page::kMaxRegularHeapObjectSize) { | 1562 if (size <= Page::kMaxRegularHeapObjectSize) { |
1567 __ Allocate(size, result, temp1, temp2, deferred->entry(), flags); | 1563 __ Allocate(size, result, temp1, temp2, deferred->entry(), flags); |
1568 } else { | 1564 } else { |
1569 __ B(deferred->entry()); | 1565 __ B(deferred->entry()); |
1570 } | 1566 } |
1571 } else { | 1567 } else { |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1606 PushSafepointRegistersScope scope(this); | 1602 PushSafepointRegistersScope scope(this); |
1607 // We're in a SafepointRegistersScope so we can use any scratch registers. | 1603 // We're in a SafepointRegistersScope so we can use any scratch registers. |
1608 Register size = x0; | 1604 Register size = x0; |
1609 if (instr->size()->IsConstantOperand()) { | 1605 if (instr->size()->IsConstantOperand()) { |
1610 __ Mov(size, ToSmi(LConstantOperand::cast(instr->size()))); | 1606 __ Mov(size, ToSmi(LConstantOperand::cast(instr->size()))); |
1611 } else { | 1607 } else { |
1612 __ SmiTag(size, ToRegister32(instr->size()).X()); | 1608 __ SmiTag(size, ToRegister32(instr->size()).X()); |
1613 } | 1609 } |
1614 int flags = AllocateDoubleAlignFlag::encode( | 1610 int flags = AllocateDoubleAlignFlag::encode( |
1615 instr->hydrogen()->MustAllocateDoubleAligned()); | 1611 instr->hydrogen()->MustAllocateDoubleAligned()); |
1616 if (instr->hydrogen()->IsOldPointerSpaceAllocation()) { | 1612 if (instr->hydrogen()->IsOldSpaceAllocation()) { |
1617 DCHECK(!instr->hydrogen()->IsOldDataSpaceAllocation()); | |
1618 DCHECK(!instr->hydrogen()->IsNewSpaceAllocation()); | 1613 DCHECK(!instr->hydrogen()->IsNewSpaceAllocation()); |
1619 flags = AllocateTargetSpace::update(flags, OLD_POINTER_SPACE); | 1614 flags = AllocateTargetSpace::update(flags, OLD_SPACE); |
1620 } else if (instr->hydrogen()->IsOldDataSpaceAllocation()) { | |
1621 DCHECK(!instr->hydrogen()->IsNewSpaceAllocation()); | |
1622 flags = AllocateTargetSpace::update(flags, OLD_DATA_SPACE); | |
1623 } else { | 1615 } else { |
1624 flags = AllocateTargetSpace::update(flags, NEW_SPACE); | 1616 flags = AllocateTargetSpace::update(flags, NEW_SPACE); |
1625 } | 1617 } |
1626 __ Mov(x10, Smi::FromInt(flags)); | 1618 __ Mov(x10, Smi::FromInt(flags)); |
1627 __ Push(size, x10); | 1619 __ Push(size, x10); |
1628 | 1620 |
1629 CallRuntimeFromDeferred( | 1621 CallRuntimeFromDeferred( |
1630 Runtime::kAllocateInTargetSpace, 2, instr, instr->context()); | 1622 Runtime::kAllocateInTargetSpace, 2, instr, instr->context()); |
1631 __ StoreToSafepointRegisterSlot(x0, ToRegister(instr->result())); | 1623 __ StoreToSafepointRegisterSlot(x0, ToRegister(instr->result())); |
1632 } | 1624 } |
(...skipping 4397 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6030 Handle<ScopeInfo> scope_info = instr->scope_info(); | 6022 Handle<ScopeInfo> scope_info = instr->scope_info(); |
6031 __ Push(scope_info); | 6023 __ Push(scope_info); |
6032 __ Push(ToRegister(instr->function())); | 6024 __ Push(ToRegister(instr->function())); |
6033 CallRuntime(Runtime::kPushBlockContext, 2, instr); | 6025 CallRuntime(Runtime::kPushBlockContext, 2, instr); |
6034 RecordSafepoint(Safepoint::kNoLazyDeopt); | 6026 RecordSafepoint(Safepoint::kNoLazyDeopt); |
6035 } | 6027 } |
6036 | 6028 |
6037 | 6029 |
6038 | 6030 |
6039 } } // namespace v8::internal | 6031 } } // namespace v8::internal |
OLD | NEW |