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 <sstream> | 5 #include <sstream> |
6 | 6 |
7 #include "src/v8.h" | 7 #include "src/v8.h" |
8 | 8 |
9 #include "src/arm64/lithium-codegen-arm64.h" | 9 #include "src/arm64/lithium-codegen-arm64.h" |
10 #include "src/hydrogen-osr.h" | 10 #include "src/hydrogen-osr.h" |
(...skipping 1546 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1557 } | 1557 } |
1558 | 1558 |
1559 | 1559 |
1560 LInstruction* LChunkBuilder::DoTailCallThroughMegamorphicCache( | 1560 LInstruction* LChunkBuilder::DoTailCallThroughMegamorphicCache( |
1561 HTailCallThroughMegamorphicCache* instr) { | 1561 HTailCallThroughMegamorphicCache* instr) { |
1562 LOperand* context = UseFixed(instr->context(), cp); | 1562 LOperand* context = UseFixed(instr->context(), cp); |
1563 LOperand* receiver_register = | 1563 LOperand* receiver_register = |
1564 UseFixed(instr->receiver(), LoadDescriptor::ReceiverRegister()); | 1564 UseFixed(instr->receiver(), LoadDescriptor::ReceiverRegister()); |
1565 LOperand* name_register = | 1565 LOperand* name_register = |
1566 UseFixed(instr->name(), LoadDescriptor::NameRegister()); | 1566 UseFixed(instr->name(), LoadDescriptor::NameRegister()); |
| 1567 LOperand* slot = NULL; |
| 1568 LOperand* vector = NULL; |
| 1569 if (FLAG_vector_ics) { |
| 1570 slot = UseFixed(instr->slot(), VectorLoadICDescriptor::SlotRegister()); |
| 1571 vector = |
| 1572 UseFixed(instr->vector(), VectorLoadICDescriptor::VectorRegister()); |
| 1573 } |
| 1574 |
1567 // Not marked as call. It can't deoptimize, and it never returns. | 1575 // Not marked as call. It can't deoptimize, and it never returns. |
1568 return new (zone()) LTailCallThroughMegamorphicCache( | 1576 return new (zone()) LTailCallThroughMegamorphicCache( |
1569 context, receiver_register, name_register); | 1577 context, receiver_register, name_register, slot, vector); |
1570 } | 1578 } |
1571 | 1579 |
1572 | 1580 |
1573 LInstruction* LChunkBuilder::DoInvokeFunction(HInvokeFunction* instr) { | 1581 LInstruction* LChunkBuilder::DoInvokeFunction(HInvokeFunction* instr) { |
1574 LOperand* context = UseFixed(instr->context(), cp); | 1582 LOperand* context = UseFixed(instr->context(), cp); |
1575 // The function is required (by MacroAssembler::InvokeFunction) to be in x1. | 1583 // The function is required (by MacroAssembler::InvokeFunction) to be in x1. |
1576 LOperand* function = UseFixed(instr->function(), x1); | 1584 LOperand* function = UseFixed(instr->function(), x1); |
1577 LInvokeFunction* result = new(zone()) LInvokeFunction(context, function); | 1585 LInvokeFunction* result = new(zone()) LInvokeFunction(context, function); |
1578 return MarkAsCall(DefineFixed(result, x0), instr, CANNOT_DEOPTIMIZE_EAGERLY); | 1586 return MarkAsCall(DefineFixed(result, x0), instr, CANNOT_DEOPTIMIZE_EAGERLY); |
1579 } | 1587 } |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1668 ? AssignEnvironment(DefineAsRegister(result)) | 1676 ? AssignEnvironment(DefineAsRegister(result)) |
1669 : DefineAsRegister(result); | 1677 : DefineAsRegister(result); |
1670 } | 1678 } |
1671 | 1679 |
1672 | 1680 |
1673 LInstruction* LChunkBuilder::DoLoadGlobalGeneric(HLoadGlobalGeneric* instr) { | 1681 LInstruction* LChunkBuilder::DoLoadGlobalGeneric(HLoadGlobalGeneric* instr) { |
1674 LOperand* context = UseFixed(instr->context(), cp); | 1682 LOperand* context = UseFixed(instr->context(), cp); |
1675 LOperand* global_object = | 1683 LOperand* global_object = |
1676 UseFixed(instr->global_object(), LoadDescriptor::ReceiverRegister()); | 1684 UseFixed(instr->global_object(), LoadDescriptor::ReceiverRegister()); |
1677 LOperand* vector = NULL; | 1685 LOperand* vector = NULL; |
1678 if (FLAG_vector_ics) { | 1686 if (instr->HasVectorAndSlot()) { |
1679 vector = FixedTemp(VectorLoadICDescriptor::VectorRegister()); | 1687 vector = FixedTemp(VectorLoadICDescriptor::VectorRegister()); |
1680 } | 1688 } |
1681 | 1689 |
1682 LLoadGlobalGeneric* result = | 1690 LLoadGlobalGeneric* result = |
1683 new(zone()) LLoadGlobalGeneric(context, global_object, vector); | 1691 new(zone()) LLoadGlobalGeneric(context, global_object, vector); |
1684 return MarkAsCall(DefineFixed(result, x0), instr); | 1692 return MarkAsCall(DefineFixed(result, x0), instr); |
1685 } | 1693 } |
1686 | 1694 |
1687 | 1695 |
1688 LInstruction* LChunkBuilder::DoLoadKeyed(HLoadKeyed* instr) { | 1696 LInstruction* LChunkBuilder::DoLoadKeyed(HLoadKeyed* instr) { |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1731 } | 1739 } |
1732 } | 1740 } |
1733 | 1741 |
1734 | 1742 |
1735 LInstruction* LChunkBuilder::DoLoadKeyedGeneric(HLoadKeyedGeneric* instr) { | 1743 LInstruction* LChunkBuilder::DoLoadKeyedGeneric(HLoadKeyedGeneric* instr) { |
1736 LOperand* context = UseFixed(instr->context(), cp); | 1744 LOperand* context = UseFixed(instr->context(), cp); |
1737 LOperand* object = | 1745 LOperand* object = |
1738 UseFixed(instr->object(), LoadDescriptor::ReceiverRegister()); | 1746 UseFixed(instr->object(), LoadDescriptor::ReceiverRegister()); |
1739 LOperand* key = UseFixed(instr->key(), LoadDescriptor::NameRegister()); | 1747 LOperand* key = UseFixed(instr->key(), LoadDescriptor::NameRegister()); |
1740 LOperand* vector = NULL; | 1748 LOperand* vector = NULL; |
1741 if (FLAG_vector_ics) { | 1749 if (instr->HasVectorAndSlot()) { |
1742 vector = FixedTemp(VectorLoadICDescriptor::VectorRegister()); | 1750 vector = FixedTemp(VectorLoadICDescriptor::VectorRegister()); |
1743 } | 1751 } |
1744 | 1752 |
1745 LInstruction* result = | 1753 LInstruction* result = |
1746 DefineFixed(new(zone()) LLoadKeyedGeneric(context, object, key, vector), | 1754 DefineFixed(new(zone()) LLoadKeyedGeneric(context, object, key, vector), |
1747 x0); | 1755 x0); |
1748 return MarkAsCall(result, instr); | 1756 return MarkAsCall(result, instr); |
1749 } | 1757 } |
1750 | 1758 |
1751 | 1759 |
1752 LInstruction* LChunkBuilder::DoLoadNamedField(HLoadNamedField* instr) { | 1760 LInstruction* LChunkBuilder::DoLoadNamedField(HLoadNamedField* instr) { |
1753 LOperand* object = UseRegisterAtStart(instr->object()); | 1761 LOperand* object = UseRegisterAtStart(instr->object()); |
1754 return DefineAsRegister(new(zone()) LLoadNamedField(object)); | 1762 return DefineAsRegister(new(zone()) LLoadNamedField(object)); |
1755 } | 1763 } |
1756 | 1764 |
1757 | 1765 |
1758 LInstruction* LChunkBuilder::DoLoadNamedGeneric(HLoadNamedGeneric* instr) { | 1766 LInstruction* LChunkBuilder::DoLoadNamedGeneric(HLoadNamedGeneric* instr) { |
1759 LOperand* context = UseFixed(instr->context(), cp); | 1767 LOperand* context = UseFixed(instr->context(), cp); |
1760 LOperand* object = | 1768 LOperand* object = |
1761 UseFixed(instr->object(), LoadDescriptor::ReceiverRegister()); | 1769 UseFixed(instr->object(), LoadDescriptor::ReceiverRegister()); |
1762 LOperand* vector = NULL; | 1770 LOperand* vector = NULL; |
1763 if (FLAG_vector_ics) { | 1771 if (instr->HasVectorAndSlot()) { |
1764 vector = FixedTemp(VectorLoadICDescriptor::VectorRegister()); | 1772 vector = FixedTemp(VectorLoadICDescriptor::VectorRegister()); |
1765 } | 1773 } |
1766 | 1774 |
1767 LInstruction* result = | 1775 LInstruction* result = |
1768 DefineFixed(new(zone()) LLoadNamedGeneric(context, object, vector), x0); | 1776 DefineFixed(new(zone()) LLoadNamedGeneric(context, object, vector), x0); |
1769 return MarkAsCall(result, instr); | 1777 return MarkAsCall(result, instr); |
1770 } | 1778 } |
1771 | 1779 |
1772 | 1780 |
1773 LInstruction* LChunkBuilder::DoLoadRoot(HLoadRoot* instr) { | 1781 LInstruction* LChunkBuilder::DoLoadRoot(HLoadRoot* instr) { |
(...skipping 970 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2744 HAllocateBlockContext* instr) { | 2752 HAllocateBlockContext* instr) { |
2745 LOperand* context = UseFixed(instr->context(), cp); | 2753 LOperand* context = UseFixed(instr->context(), cp); |
2746 LOperand* function = UseRegisterAtStart(instr->function()); | 2754 LOperand* function = UseRegisterAtStart(instr->function()); |
2747 LAllocateBlockContext* result = | 2755 LAllocateBlockContext* result = |
2748 new(zone()) LAllocateBlockContext(context, function); | 2756 new(zone()) LAllocateBlockContext(context, function); |
2749 return MarkAsCall(DefineFixed(result, cp), instr); | 2757 return MarkAsCall(DefineFixed(result, cp), instr); |
2750 } | 2758 } |
2751 | 2759 |
2752 | 2760 |
2753 } } // namespace v8::internal | 2761 } } // namespace v8::internal |
OLD | NEW |