| 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_CRANKSHAFT_ARM64_LITHIUM_ARM64_H_ | 5 #ifndef V8_CRANKSHAFT_ARM64_LITHIUM_ARM64_H_ |
| 6 #define V8_CRANKSHAFT_ARM64_LITHIUM_ARM64_H_ | 6 #define V8_CRANKSHAFT_ARM64_LITHIUM_ARM64_H_ |
| 7 | 7 |
| 8 #include "src/crankshaft/hydrogen.h" | 8 #include "src/crankshaft/hydrogen.h" |
| 9 #include "src/crankshaft/lithium.h" | 9 #include "src/crankshaft/lithium.h" |
| 10 #include "src/crankshaft/lithium-allocator.h" | 10 #include "src/crankshaft/lithium-allocator.h" |
| (...skipping 1661 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1672 LOperand* temp_vector() { return temps_[0]; } | 1672 LOperand* temp_vector() { return temps_[0]; } |
| 1673 | 1673 |
| 1674 DECLARE_CONCRETE_INSTRUCTION(LoadGlobalGeneric, "load-global-generic") | 1674 DECLARE_CONCRETE_INSTRUCTION(LoadGlobalGeneric, "load-global-generic") |
| 1675 DECLARE_HYDROGEN_ACCESSOR(LoadGlobalGeneric) | 1675 DECLARE_HYDROGEN_ACCESSOR(LoadGlobalGeneric) |
| 1676 | 1676 |
| 1677 Handle<Object> name() const { return hydrogen()->name(); } | 1677 Handle<Object> name() const { return hydrogen()->name(); } |
| 1678 TypeofMode typeof_mode() const { return hydrogen()->typeof_mode(); } | 1678 TypeofMode typeof_mode() const { return hydrogen()->typeof_mode(); } |
| 1679 }; | 1679 }; |
| 1680 | 1680 |
| 1681 | 1681 |
| 1682 template<int T> | 1682 template <int T> |
| 1683 class LLoadKeyed : public LTemplateInstruction<1, 2, T> { | 1683 class LLoadKeyed : public LTemplateInstruction<1, 3, T> { |
| 1684 public: | 1684 public: |
| 1685 LLoadKeyed(LOperand* elements, LOperand* key) { | 1685 LLoadKeyed(LOperand* elements, LOperand* key, LOperand* backing_store_owner) { |
| 1686 this->inputs_[0] = elements; | 1686 this->inputs_[0] = elements; |
| 1687 this->inputs_[1] = key; | 1687 this->inputs_[1] = key; |
| 1688 this->inputs_[2] = backing_store_owner; |
| 1688 } | 1689 } |
| 1689 | 1690 |
| 1690 LOperand* elements() { return this->inputs_[0]; } | 1691 LOperand* elements() { return this->inputs_[0]; } |
| 1691 LOperand* key() { return this->inputs_[1]; } | 1692 LOperand* key() { return this->inputs_[1]; } |
| 1693 LOperand* backing_store_owner() { return this->inputs_[2]; } |
| 1692 ElementsKind elements_kind() const { | 1694 ElementsKind elements_kind() const { |
| 1693 return this->hydrogen()->elements_kind(); | 1695 return this->hydrogen()->elements_kind(); |
| 1694 } | 1696 } |
| 1695 bool is_external() const { | 1697 bool is_external() const { |
| 1696 return this->hydrogen()->is_external(); | 1698 return this->hydrogen()->is_external(); |
| 1697 } | 1699 } |
| 1698 bool is_fixed_typed_array() const { | 1700 bool is_fixed_typed_array() const { |
| 1699 return hydrogen()->is_fixed_typed_array(); | 1701 return hydrogen()->is_fixed_typed_array(); |
| 1700 } | 1702 } |
| 1701 bool is_typed_elements() const { | 1703 bool is_typed_elements() const { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1714 stream->Add("]"); | 1716 stream->Add("]"); |
| 1715 } | 1717 } |
| 1716 } | 1718 } |
| 1717 | 1719 |
| 1718 DECLARE_HYDROGEN_ACCESSOR(LoadKeyed) | 1720 DECLARE_HYDROGEN_ACCESSOR(LoadKeyed) |
| 1719 }; | 1721 }; |
| 1720 | 1722 |
| 1721 | 1723 |
| 1722 class LLoadKeyedExternal: public LLoadKeyed<1> { | 1724 class LLoadKeyedExternal: public LLoadKeyed<1> { |
| 1723 public: | 1725 public: |
| 1724 LLoadKeyedExternal(LOperand* elements, LOperand* key, LOperand* temp) : | 1726 LLoadKeyedExternal(LOperand* elements, LOperand* key, |
| 1725 LLoadKeyed<1>(elements, key) { | 1727 LOperand* backing_store_owner, LOperand* temp) |
| 1728 : LLoadKeyed<1>(elements, key, backing_store_owner) { |
| 1726 temps_[0] = temp; | 1729 temps_[0] = temp; |
| 1727 } | 1730 } |
| 1728 | 1731 |
| 1729 LOperand* temp() { return temps_[0]; } | 1732 LOperand* temp() { return temps_[0]; } |
| 1730 | 1733 |
| 1731 DECLARE_CONCRETE_INSTRUCTION(LoadKeyedExternal, "load-keyed-external"); | 1734 DECLARE_CONCRETE_INSTRUCTION(LoadKeyedExternal, "load-keyed-external"); |
| 1732 }; | 1735 }; |
| 1733 | 1736 |
| 1734 | 1737 |
| 1735 class LLoadKeyedFixed: public LLoadKeyed<1> { | 1738 class LLoadKeyedFixed: public LLoadKeyed<1> { |
| 1736 public: | 1739 public: |
| 1737 LLoadKeyedFixed(LOperand* elements, LOperand* key, LOperand* temp) : | 1740 LLoadKeyedFixed(LOperand* elements, LOperand* key, LOperand* temp) |
| 1738 LLoadKeyed<1>(elements, key) { | 1741 : LLoadKeyed<1>(elements, key, nullptr) { |
| 1739 temps_[0] = temp; | 1742 temps_[0] = temp; |
| 1740 } | 1743 } |
| 1741 | 1744 |
| 1742 LOperand* temp() { return temps_[0]; } | 1745 LOperand* temp() { return temps_[0]; } |
| 1743 | 1746 |
| 1744 DECLARE_CONCRETE_INSTRUCTION(LoadKeyedFixed, "load-keyed-fixed"); | 1747 DECLARE_CONCRETE_INSTRUCTION(LoadKeyedFixed, "load-keyed-fixed"); |
| 1745 }; | 1748 }; |
| 1746 | 1749 |
| 1747 | 1750 |
| 1748 class LLoadKeyedFixedDouble: public LLoadKeyed<1> { | 1751 class LLoadKeyedFixedDouble: public LLoadKeyed<1> { |
| 1749 public: | 1752 public: |
| 1750 LLoadKeyedFixedDouble(LOperand* elements, LOperand* key, LOperand* temp) : | 1753 LLoadKeyedFixedDouble(LOperand* elements, LOperand* key, LOperand* temp) |
| 1751 LLoadKeyed<1>(elements, key) { | 1754 : LLoadKeyed<1>(elements, key, nullptr) { |
| 1752 temps_[0] = temp; | 1755 temps_[0] = temp; |
| 1753 } | 1756 } |
| 1754 | 1757 |
| 1755 LOperand* temp() { return temps_[0]; } | 1758 LOperand* temp() { return temps_[0]; } |
| 1756 | 1759 |
| 1757 DECLARE_CONCRETE_INSTRUCTION(LoadKeyedFixedDouble, "load-keyed-fixed-double"); | 1760 DECLARE_CONCRETE_INSTRUCTION(LoadKeyedFixedDouble, "load-keyed-fixed-double"); |
| 1758 }; | 1761 }; |
| 1759 | 1762 |
| 1760 | 1763 |
| 1761 class LLoadKeyedGeneric final : public LTemplateInstruction<1, 3, 1> { | 1764 class LLoadKeyedGeneric final : public LTemplateInstruction<1, 3, 1> { |
| (...skipping 600 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2362 DECLARE_CONCRETE_INSTRUCTION(StackCheck, "stack-check") | 2365 DECLARE_CONCRETE_INSTRUCTION(StackCheck, "stack-check") |
| 2363 DECLARE_HYDROGEN_ACCESSOR(StackCheck) | 2366 DECLARE_HYDROGEN_ACCESSOR(StackCheck) |
| 2364 | 2367 |
| 2365 Label* done_label() { return &done_label_; } | 2368 Label* done_label() { return &done_label_; } |
| 2366 | 2369 |
| 2367 private: | 2370 private: |
| 2368 Label done_label_; | 2371 Label done_label_; |
| 2369 }; | 2372 }; |
| 2370 | 2373 |
| 2371 | 2374 |
| 2372 template<int T> | 2375 template <int T> |
| 2373 class LStoreKeyed : public LTemplateInstruction<0, 3, T> { | 2376 class LStoreKeyed : public LTemplateInstruction<0, 4, T> { |
| 2374 public: | 2377 public: |
| 2375 LStoreKeyed(LOperand* elements, LOperand* key, LOperand* value) { | 2378 LStoreKeyed(LOperand* elements, LOperand* key, LOperand* value, |
| 2379 LOperand* backing_store_owner) { |
| 2376 this->inputs_[0] = elements; | 2380 this->inputs_[0] = elements; |
| 2377 this->inputs_[1] = key; | 2381 this->inputs_[1] = key; |
| 2378 this->inputs_[2] = value; | 2382 this->inputs_[2] = value; |
| 2383 this->inputs_[3] = backing_store_owner; |
| 2379 } | 2384 } |
| 2380 | 2385 |
| 2381 bool is_external() const { return this->hydrogen()->is_external(); } | 2386 bool is_external() const { return this->hydrogen()->is_external(); } |
| 2382 bool is_fixed_typed_array() const { | 2387 bool is_fixed_typed_array() const { |
| 2383 return hydrogen()->is_fixed_typed_array(); | 2388 return hydrogen()->is_fixed_typed_array(); |
| 2384 } | 2389 } |
| 2385 bool is_typed_elements() const { | 2390 bool is_typed_elements() const { |
| 2386 return is_external() || is_fixed_typed_array(); | 2391 return is_external() || is_fixed_typed_array(); |
| 2387 } | 2392 } |
| 2388 LOperand* elements() { return this->inputs_[0]; } | 2393 LOperand* elements() { return this->inputs_[0]; } |
| 2389 LOperand* key() { return this->inputs_[1]; } | 2394 LOperand* key() { return this->inputs_[1]; } |
| 2390 LOperand* value() { return this->inputs_[2]; } | 2395 LOperand* value() { return this->inputs_[2]; } |
| 2396 LOperand* backing_store_owner() { return this->inputs_[3]; } |
| 2391 ElementsKind elements_kind() const { | 2397 ElementsKind elements_kind() const { |
| 2392 return this->hydrogen()->elements_kind(); | 2398 return this->hydrogen()->elements_kind(); |
| 2393 } | 2399 } |
| 2394 | 2400 |
| 2395 bool NeedsCanonicalization() { | 2401 bool NeedsCanonicalization() { |
| 2396 if (hydrogen()->value()->IsAdd() || hydrogen()->value()->IsSub() || | 2402 if (hydrogen()->value()->IsAdd() || hydrogen()->value()->IsSub() || |
| 2397 hydrogen()->value()->IsMul() || hydrogen()->value()->IsDiv()) { | 2403 hydrogen()->value()->IsMul() || hydrogen()->value()->IsDiv()) { |
| 2398 return false; | 2404 return false; |
| 2399 } | 2405 } |
| 2400 return this->hydrogen()->NeedsCanonicalization(); | 2406 return this->hydrogen()->NeedsCanonicalization(); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 2420 } | 2426 } |
| 2421 } | 2427 } |
| 2422 | 2428 |
| 2423 DECLARE_HYDROGEN_ACCESSOR(StoreKeyed) | 2429 DECLARE_HYDROGEN_ACCESSOR(StoreKeyed) |
| 2424 }; | 2430 }; |
| 2425 | 2431 |
| 2426 | 2432 |
| 2427 class LStoreKeyedExternal final : public LStoreKeyed<1> { | 2433 class LStoreKeyedExternal final : public LStoreKeyed<1> { |
| 2428 public: | 2434 public: |
| 2429 LStoreKeyedExternal(LOperand* elements, LOperand* key, LOperand* value, | 2435 LStoreKeyedExternal(LOperand* elements, LOperand* key, LOperand* value, |
| 2430 LOperand* temp) : | 2436 LOperand* backing_store_owner, LOperand* temp) |
| 2431 LStoreKeyed<1>(elements, key, value) { | 2437 : LStoreKeyed<1>(elements, key, value, backing_store_owner) { |
| 2432 temps_[0] = temp; | 2438 temps_[0] = temp; |
| 2433 } | 2439 } |
| 2434 | 2440 |
| 2435 LOperand* temp() { return temps_[0]; } | 2441 LOperand* temp() { return temps_[0]; } |
| 2436 | 2442 |
| 2437 DECLARE_CONCRETE_INSTRUCTION(StoreKeyedExternal, "store-keyed-external") | 2443 DECLARE_CONCRETE_INSTRUCTION(StoreKeyedExternal, "store-keyed-external") |
| 2438 }; | 2444 }; |
| 2439 | 2445 |
| 2440 | 2446 |
| 2441 class LStoreKeyedFixed final : public LStoreKeyed<1> { | 2447 class LStoreKeyedFixed final : public LStoreKeyed<1> { |
| 2442 public: | 2448 public: |
| 2443 LStoreKeyedFixed(LOperand* elements, LOperand* key, LOperand* value, | 2449 LStoreKeyedFixed(LOperand* elements, LOperand* key, LOperand* value, |
| 2444 LOperand* temp) : | 2450 LOperand* temp) |
| 2445 LStoreKeyed<1>(elements, key, value) { | 2451 : LStoreKeyed<1>(elements, key, value, nullptr) { |
| 2446 temps_[0] = temp; | 2452 temps_[0] = temp; |
| 2447 } | 2453 } |
| 2448 | 2454 |
| 2449 LOperand* temp() { return temps_[0]; } | 2455 LOperand* temp() { return temps_[0]; } |
| 2450 | 2456 |
| 2451 DECLARE_CONCRETE_INSTRUCTION(StoreKeyedFixed, "store-keyed-fixed") | 2457 DECLARE_CONCRETE_INSTRUCTION(StoreKeyedFixed, "store-keyed-fixed") |
| 2452 }; | 2458 }; |
| 2453 | 2459 |
| 2454 | 2460 |
| 2455 class LStoreKeyedFixedDouble final : public LStoreKeyed<1> { | 2461 class LStoreKeyedFixedDouble final : public LStoreKeyed<1> { |
| 2456 public: | 2462 public: |
| 2457 LStoreKeyedFixedDouble(LOperand* elements, LOperand* key, LOperand* value, | 2463 LStoreKeyedFixedDouble(LOperand* elements, LOperand* key, LOperand* value, |
| 2458 LOperand* temp) : | 2464 LOperand* temp) |
| 2459 LStoreKeyed<1>(elements, key, value) { | 2465 : LStoreKeyed<1>(elements, key, value, nullptr) { |
| 2460 temps_[0] = temp; | 2466 temps_[0] = temp; |
| 2461 } | 2467 } |
| 2462 | 2468 |
| 2463 LOperand* temp() { return temps_[0]; } | 2469 LOperand* temp() { return temps_[0]; } |
| 2464 | 2470 |
| 2465 DECLARE_CONCRETE_INSTRUCTION(StoreKeyedFixedDouble, | 2471 DECLARE_CONCRETE_INSTRUCTION(StoreKeyedFixedDouble, |
| 2466 "store-keyed-fixed-double") | 2472 "store-keyed-fixed-double") |
| 2467 }; | 2473 }; |
| 2468 | 2474 |
| 2469 | 2475 |
| (...skipping 693 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3163 DISALLOW_COPY_AND_ASSIGN(LChunkBuilder); | 3169 DISALLOW_COPY_AND_ASSIGN(LChunkBuilder); |
| 3164 }; | 3170 }; |
| 3165 | 3171 |
| 3166 #undef DECLARE_HYDROGEN_ACCESSOR | 3172 #undef DECLARE_HYDROGEN_ACCESSOR |
| 3167 #undef DECLARE_CONCRETE_INSTRUCTION | 3173 #undef DECLARE_CONCRETE_INSTRUCTION |
| 3168 | 3174 |
| 3169 } // namespace internal | 3175 } // namespace internal |
| 3170 } // namespace v8 | 3176 } // namespace v8 |
| 3171 | 3177 |
| 3172 #endif // V8_CRANKSHAFT_ARM64_LITHIUM_ARM64_H_ | 3178 #endif // V8_CRANKSHAFT_ARM64_LITHIUM_ARM64_H_ |
| OLD | NEW |