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 #ifndef V8_ARM64_LITHIUM_ARM64_H_ | 5 #ifndef V8_ARM64_LITHIUM_ARM64_H_ |
6 #define V8_ARM64_LITHIUM_ARM64_H_ | 6 #define V8_ARM64_LITHIUM_ARM64_H_ |
7 | 7 |
8 #include "src/hydrogen.h" | 8 #include "src/hydrogen.h" |
9 #include "src/lithium.h" | 9 #include "src/lithium.h" |
10 #include "src/lithium-allocator.h" | 10 #include "src/lithium-allocator.h" |
(...skipping 1702 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1713 }; | 1713 }; |
1714 | 1714 |
1715 | 1715 |
1716 class LLoadGlobalCell V8_FINAL : public LTemplateInstruction<1, 0, 0> { | 1716 class LLoadGlobalCell V8_FINAL : public LTemplateInstruction<1, 0, 0> { |
1717 public: | 1717 public: |
1718 DECLARE_CONCRETE_INSTRUCTION(LoadGlobalCell, "load-global-cell") | 1718 DECLARE_CONCRETE_INSTRUCTION(LoadGlobalCell, "load-global-cell") |
1719 DECLARE_HYDROGEN_ACCESSOR(LoadGlobalCell) | 1719 DECLARE_HYDROGEN_ACCESSOR(LoadGlobalCell) |
1720 }; | 1720 }; |
1721 | 1721 |
1722 | 1722 |
1723 class LLoadGlobalGeneric V8_FINAL : public LTemplateInstruction<1, 2, 0> { | 1723 class LLoadGlobalGeneric V8_FINAL : public LTemplateInstruction<1, 2, 1> { |
1724 public: | 1724 public: |
1725 LLoadGlobalGeneric(LOperand* context, LOperand* global_object) { | 1725 LLoadGlobalGeneric(LOperand* context, LOperand* global_object, |
| 1726 LOperand* vector) { |
1726 inputs_[0] = context; | 1727 inputs_[0] = context; |
1727 inputs_[1] = global_object; | 1728 inputs_[1] = global_object; |
| 1729 temps_[0] = vector; |
1728 } | 1730 } |
1729 | 1731 |
1730 LOperand* context() { return inputs_[0]; } | 1732 LOperand* context() { return inputs_[0]; } |
1731 LOperand* global_object() { return inputs_[1]; } | 1733 LOperand* global_object() { return inputs_[1]; } |
| 1734 LOperand* temp_vector() { return temps_[0]; } |
1732 | 1735 |
1733 DECLARE_CONCRETE_INSTRUCTION(LoadGlobalGeneric, "load-global-generic") | 1736 DECLARE_CONCRETE_INSTRUCTION(LoadGlobalGeneric, "load-global-generic") |
1734 DECLARE_HYDROGEN_ACCESSOR(LoadGlobalGeneric) | 1737 DECLARE_HYDROGEN_ACCESSOR(LoadGlobalGeneric) |
1735 | 1738 |
1736 Handle<Object> name() const { return hydrogen()->name(); } | 1739 Handle<Object> name() const { return hydrogen()->name(); } |
1737 bool for_typeof() const { return hydrogen()->for_typeof(); } | 1740 bool for_typeof() const { return hydrogen()->for_typeof(); } |
1738 }; | 1741 }; |
1739 | 1742 |
1740 | 1743 |
1741 template<int T> | 1744 template<int T> |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1810 LLoadKeyed<1>(elements, key) { | 1813 LLoadKeyed<1>(elements, key) { |
1811 temps_[0] = temp; | 1814 temps_[0] = temp; |
1812 } | 1815 } |
1813 | 1816 |
1814 LOperand* temp() { return temps_[0]; } | 1817 LOperand* temp() { return temps_[0]; } |
1815 | 1818 |
1816 DECLARE_CONCRETE_INSTRUCTION(LoadKeyedFixedDouble, "load-keyed-fixed-double"); | 1819 DECLARE_CONCRETE_INSTRUCTION(LoadKeyedFixedDouble, "load-keyed-fixed-double"); |
1817 }; | 1820 }; |
1818 | 1821 |
1819 | 1822 |
1820 class LLoadKeyedGeneric V8_FINAL : public LTemplateInstruction<1, 3, 0> { | 1823 class LLoadKeyedGeneric V8_FINAL : public LTemplateInstruction<1, 3, 1> { |
1821 public: | 1824 public: |
1822 LLoadKeyedGeneric(LOperand* context, LOperand* object, LOperand* key) { | 1825 LLoadKeyedGeneric(LOperand* context, LOperand* object, LOperand* key, |
| 1826 LOperand* vector) { |
1823 inputs_[0] = context; | 1827 inputs_[0] = context; |
1824 inputs_[1] = object; | 1828 inputs_[1] = object; |
1825 inputs_[2] = key; | 1829 inputs_[2] = key; |
| 1830 temps_[0] = vector; |
1826 } | 1831 } |
1827 | 1832 |
1828 LOperand* context() { return inputs_[0]; } | 1833 LOperand* context() { return inputs_[0]; } |
1829 LOperand* object() { return inputs_[1]; } | 1834 LOperand* object() { return inputs_[1]; } |
1830 LOperand* key() { return inputs_[2]; } | 1835 LOperand* key() { return inputs_[2]; } |
| 1836 LOperand* temp_vector() { return temps_[0]; } |
1831 | 1837 |
1832 DECLARE_CONCRETE_INSTRUCTION(LoadKeyedGeneric, "load-keyed-generic") | 1838 DECLARE_CONCRETE_INSTRUCTION(LoadKeyedGeneric, "load-keyed-generic") |
| 1839 DECLARE_HYDROGEN_ACCESSOR(LoadKeyedGeneric) |
1833 }; | 1840 }; |
1834 | 1841 |
1835 | 1842 |
1836 class LLoadNamedGeneric V8_FINAL : public LTemplateInstruction<1, 2, 0> { | 1843 class LLoadNamedGeneric V8_FINAL : public LTemplateInstruction<1, 2, 1> { |
1837 public: | 1844 public: |
1838 LLoadNamedGeneric(LOperand* context, LOperand* object) { | 1845 LLoadNamedGeneric(LOperand* context, LOperand* object, LOperand* vector) { |
1839 inputs_[0] = context; | 1846 inputs_[0] = context; |
1840 inputs_[1] = object; | 1847 inputs_[1] = object; |
| 1848 temps_[0] = vector; |
1841 } | 1849 } |
1842 | 1850 |
1843 LOperand* context() { return inputs_[0]; } | 1851 LOperand* context() { return inputs_[0]; } |
1844 LOperand* object() { return inputs_[1]; } | 1852 LOperand* object() { return inputs_[1]; } |
| 1853 LOperand* temp_vector() { return temps_[0]; } |
1845 | 1854 |
1846 DECLARE_CONCRETE_INSTRUCTION(LoadNamedGeneric, "load-named-generic") | 1855 DECLARE_CONCRETE_INSTRUCTION(LoadNamedGeneric, "load-named-generic") |
1847 DECLARE_HYDROGEN_ACCESSOR(LoadNamedGeneric) | 1856 DECLARE_HYDROGEN_ACCESSOR(LoadNamedGeneric) |
1848 | 1857 |
1849 Handle<Object> name() const { return hydrogen()->name(); } | 1858 Handle<Object> name() const { return hydrogen()->name(); } |
1850 }; | 1859 }; |
1851 | 1860 |
1852 | 1861 |
1853 class LLoadRoot V8_FINAL : public LTemplateInstruction<1, 0, 0> { | 1862 class LLoadRoot V8_FINAL : public LTemplateInstruction<1, 0, 0> { |
1854 public: | 1863 public: |
(...skipping 1294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3149 // An input operand in register, stack slot or a constant operand. | 3158 // An input operand in register, stack slot or a constant operand. |
3150 // Will not be moved to a register even if one is freely available. | 3159 // Will not be moved to a register even if one is freely available. |
3151 virtual MUST_USE_RESULT LOperand* UseAny(HValue* value); | 3160 virtual MUST_USE_RESULT LOperand* UseAny(HValue* value); |
3152 | 3161 |
3153 // Temporary operand that must be in a register. | 3162 // Temporary operand that must be in a register. |
3154 MUST_USE_RESULT LUnallocated* TempRegister(); | 3163 MUST_USE_RESULT LUnallocated* TempRegister(); |
3155 | 3164 |
3156 // Temporary operand that must be in a double register. | 3165 // Temporary operand that must be in a double register. |
3157 MUST_USE_RESULT LUnallocated* TempDoubleRegister(); | 3166 MUST_USE_RESULT LUnallocated* TempDoubleRegister(); |
3158 | 3167 |
| 3168 MUST_USE_RESULT LOperand* FixedTemp(Register reg); |
| 3169 |
3159 // Temporary operand that must be in a fixed double register. | 3170 // Temporary operand that must be in a fixed double register. |
3160 MUST_USE_RESULT LOperand* FixedTemp(DoubleRegister reg); | 3171 MUST_USE_RESULT LOperand* FixedTemp(DoubleRegister reg); |
3161 | 3172 |
3162 // Methods for setting up define-use relationships. | 3173 // Methods for setting up define-use relationships. |
3163 // Return the same instruction that they are passed. | 3174 // Return the same instruction that they are passed. |
3164 LInstruction* Define(LTemplateResultInstruction<1>* instr, | 3175 LInstruction* Define(LTemplateResultInstruction<1>* instr, |
3165 LUnallocated* result); | 3176 LUnallocated* result); |
3166 LInstruction* DefineAsRegister(LTemplateResultInstruction<1>* instr); | 3177 LInstruction* DefineAsRegister(LTemplateResultInstruction<1>* instr); |
3167 LInstruction* DefineAsSpilled(LTemplateResultInstruction<1>* instr, | 3178 LInstruction* DefineAsSpilled(LTemplateResultInstruction<1>* instr, |
3168 int index); | 3179 int index); |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3239 | 3250 |
3240 DISALLOW_COPY_AND_ASSIGN(LChunkBuilder); | 3251 DISALLOW_COPY_AND_ASSIGN(LChunkBuilder); |
3241 }; | 3252 }; |
3242 | 3253 |
3243 #undef DECLARE_HYDROGEN_ACCESSOR | 3254 #undef DECLARE_HYDROGEN_ACCESSOR |
3244 #undef DECLARE_CONCRETE_INSTRUCTION | 3255 #undef DECLARE_CONCRETE_INSTRUCTION |
3245 | 3256 |
3246 } } // namespace v8::internal | 3257 } } // namespace v8::internal |
3247 | 3258 |
3248 #endif // V8_ARM64_LITHIUM_ARM64_H_ | 3259 #endif // V8_ARM64_LITHIUM_ARM64_H_ |
OLD | NEW |