OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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 // Required to get M_E etc. in MSVC. | 7 // Required to get M_E etc. in MSVC. |
8 #if defined(_WIN32) | 8 #if defined(_WIN32) |
9 #define _USE_MATH_DEFINES | 9 #define _USE_MATH_DEFINES |
10 #endif | 10 #endif |
(...skipping 638 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
649 struct FunctionTableIndices : public ZoneObject { | 649 struct FunctionTableIndices : public ZoneObject { |
650 uint32_t start_index; | 650 uint32_t start_index; |
651 uint32_t signature_index; | 651 uint32_t signature_index; |
652 }; | 652 }; |
653 | 653 |
654 void InsertFunctionTable(Variable* v, uint32_t start_index, | 654 void InsertFunctionTable(Variable* v, uint32_t start_index, |
655 uint32_t signature_index) { | 655 uint32_t signature_index) { |
656 FunctionTableIndices* container = new (zone()) FunctionTableIndices(); | 656 FunctionTableIndices* container = new (zone()) FunctionTableIndices(); |
657 container->start_index = start_index; | 657 container->start_index = start_index; |
658 container->signature_index = signature_index; | 658 container->signature_index = signature_index; |
659 ZoneHashMap::Entry* entry = function_tables_.LookupOrInsert( | 659 ZoneHashMap::Entry* entry = |
660 v, ComputePointerHash(v), ZoneAllocationPolicy(zone())); | 660 function_tables_.LookupOrInsert(v, ComputePointerHash(v)); |
661 entry->value = container; | 661 entry->value = container; |
662 } | 662 } |
663 | 663 |
664 FunctionTableIndices* LookupFunctionTable(Variable* v) { | 664 FunctionTableIndices* LookupFunctionTable(Variable* v) { |
665 ZoneHashMap::Entry* entry = | 665 ZoneHashMap::Entry* entry = |
666 function_tables_.Lookup(v, ComputePointerHash(v)); | 666 function_tables_.Lookup(v, ComputePointerHash(v)); |
667 DCHECK_NOT_NULL(entry); | 667 DCHECK_NOT_NULL(entry); |
668 return reinterpret_cast<FunctionTableIndices*>(entry->value); | 668 return reinterpret_cast<FunctionTableIndices*>(entry->value); |
669 } | 669 } |
670 | 670 |
(...skipping 14 matching lines...) Expand all Loading... |
685 public: | 685 public: |
686 explicit ImportedFunctionTable(AsmWasmBuilderImpl* builder) | 686 explicit ImportedFunctionTable(AsmWasmBuilderImpl* builder) |
687 : table_(base::HashMap::PointersMatch, | 687 : table_(base::HashMap::PointersMatch, |
688 ZoneHashMap::kDefaultHashMapCapacity, | 688 ZoneHashMap::kDefaultHashMapCapacity, |
689 ZoneAllocationPolicy(builder->zone())), | 689 ZoneAllocationPolicy(builder->zone())), |
690 builder_(builder) {} | 690 builder_(builder) {} |
691 | 691 |
692 void AddImport(Variable* v, const char* name, int name_length) { | 692 void AddImport(Variable* v, const char* name, int name_length) { |
693 ImportedFunctionIndices* indices = new (builder_->zone()) | 693 ImportedFunctionIndices* indices = new (builder_->zone()) |
694 ImportedFunctionIndices(name, name_length, builder_->zone()); | 694 ImportedFunctionIndices(name, name_length, builder_->zone()); |
695 ZoneHashMap::Entry* entry = table_.LookupOrInsert( | 695 ZoneHashMap::Entry* entry = |
696 v, ComputePointerHash(v), ZoneAllocationPolicy(builder_->zone())); | 696 table_.LookupOrInsert(v, ComputePointerHash(v)); |
697 entry->value = indices; | 697 entry->value = indices; |
698 } | 698 } |
699 | 699 |
700 uint32_t GetFunctionIndex(Variable* v, FunctionSig* sig) { | 700 uint32_t GetFunctionIndex(Variable* v, FunctionSig* sig) { |
701 ZoneHashMap::Entry* entry = table_.Lookup(v, ComputePointerHash(v)); | 701 ZoneHashMap::Entry* entry = table_.Lookup(v, ComputePointerHash(v)); |
702 DCHECK_NOT_NULL(entry); | 702 DCHECK_NOT_NULL(entry); |
703 ImportedFunctionIndices* indices = | 703 ImportedFunctionIndices* indices = |
704 reinterpret_cast<ImportedFunctionIndices*>(entry->value); | 704 reinterpret_cast<ImportedFunctionIndices*>(entry->value); |
705 WasmModuleBuilder::SignatureMap::iterator pos = | 705 WasmModuleBuilder::SignatureMap::iterator pos = |
706 indices->signature_to_index_.find(sig); | 706 indices->signature_to_index_.find(sig); |
(...skipping 972 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1679 uint32_t LookupOrInsertLocal(Variable* v, LocalType type) { | 1679 uint32_t LookupOrInsertLocal(Variable* v, LocalType type) { |
1680 DCHECK_NOT_NULL(current_function_builder_); | 1680 DCHECK_NOT_NULL(current_function_builder_); |
1681 ZoneHashMap::Entry* entry = | 1681 ZoneHashMap::Entry* entry = |
1682 local_variables_.Lookup(v, ComputePointerHash(v)); | 1682 local_variables_.Lookup(v, ComputePointerHash(v)); |
1683 if (entry == nullptr) { | 1683 if (entry == nullptr) { |
1684 uint32_t index; | 1684 uint32_t index; |
1685 DCHECK(!v->IsParameter()); | 1685 DCHECK(!v->IsParameter()); |
1686 index = current_function_builder_->AddLocal(type); | 1686 index = current_function_builder_->AddLocal(type); |
1687 IndexContainer* container = new (zone()) IndexContainer(); | 1687 IndexContainer* container = new (zone()) IndexContainer(); |
1688 container->index = index; | 1688 container->index = index; |
1689 entry = local_variables_.LookupOrInsert(v, ComputePointerHash(v), | 1689 entry = local_variables_.LookupOrInsert(v, ComputePointerHash(v)); |
1690 ZoneAllocationPolicy(zone())); | |
1691 entry->value = container; | 1690 entry->value = container; |
1692 } | 1691 } |
1693 return (reinterpret_cast<IndexContainer*>(entry->value))->index; | 1692 return (reinterpret_cast<IndexContainer*>(entry->value))->index; |
1694 } | 1693 } |
1695 | 1694 |
1696 void InsertParameter(Variable* v, LocalType type, uint32_t index) { | 1695 void InsertParameter(Variable* v, LocalType type, uint32_t index) { |
1697 DCHECK(v->IsParameter()); | 1696 DCHECK(v->IsParameter()); |
1698 DCHECK_NOT_NULL(current_function_builder_); | 1697 DCHECK_NOT_NULL(current_function_builder_); |
1699 ZoneHashMap::Entry* entry = | 1698 ZoneHashMap::Entry* entry = |
1700 local_variables_.Lookup(v, ComputePointerHash(v)); | 1699 local_variables_.Lookup(v, ComputePointerHash(v)); |
1701 DCHECK_NULL(entry); | 1700 DCHECK_NULL(entry); |
1702 IndexContainer* container = new (zone()) IndexContainer(); | 1701 IndexContainer* container = new (zone()) IndexContainer(); |
1703 container->index = index; | 1702 container->index = index; |
1704 entry = local_variables_.LookupOrInsert(v, ComputePointerHash(v), | 1703 entry = local_variables_.LookupOrInsert(v, ComputePointerHash(v)); |
1705 ZoneAllocationPolicy(zone())); | |
1706 entry->value = container; | 1704 entry->value = container; |
1707 } | 1705 } |
1708 | 1706 |
1709 uint32_t LookupOrInsertGlobal(Variable* v, LocalType type) { | 1707 uint32_t LookupOrInsertGlobal(Variable* v, LocalType type) { |
1710 ZoneHashMap::Entry* entry = | 1708 ZoneHashMap::Entry* entry = |
1711 global_variables_.Lookup(v, ComputePointerHash(v)); | 1709 global_variables_.Lookup(v, ComputePointerHash(v)); |
1712 if (entry == nullptr) { | 1710 if (entry == nullptr) { |
1713 uint32_t index = builder_->AddGlobal(type, 0); | 1711 uint32_t index = builder_->AddGlobal(type, 0); |
1714 IndexContainer* container = new (zone()) IndexContainer(); | 1712 IndexContainer* container = new (zone()) IndexContainer(); |
1715 container->index = index; | 1713 container->index = index; |
1716 entry = global_variables_.LookupOrInsert(v, ComputePointerHash(v), | 1714 entry = global_variables_.LookupOrInsert(v, ComputePointerHash(v)); |
1717 ZoneAllocationPolicy(zone())); | |
1718 entry->value = container; | 1715 entry->value = container; |
1719 } | 1716 } |
1720 return (reinterpret_cast<IndexContainer*>(entry->value))->index; | 1717 return (reinterpret_cast<IndexContainer*>(entry->value))->index; |
1721 } | 1718 } |
1722 | 1719 |
1723 uint32_t LookupOrInsertFunction(Variable* v) { | 1720 uint32_t LookupOrInsertFunction(Variable* v) { |
1724 DCHECK_NOT_NULL(builder_); | 1721 DCHECK_NOT_NULL(builder_); |
1725 ZoneHashMap::Entry* entry = functions_.Lookup(v, ComputePointerHash(v)); | 1722 ZoneHashMap::Entry* entry = functions_.Lookup(v, ComputePointerHash(v)); |
1726 if (entry == nullptr) { | 1723 if (entry == nullptr) { |
1727 uint32_t index = builder_->AddFunction(); | 1724 uint32_t index = builder_->AddFunction(); |
1728 IndexContainer* container = new (zone()) IndexContainer(); | 1725 IndexContainer* container = new (zone()) IndexContainer(); |
1729 container->index = index; | 1726 container->index = index; |
1730 entry = functions_.LookupOrInsert(v, ComputePointerHash(v), | 1727 entry = functions_.LookupOrInsert(v, ComputePointerHash(v)); |
1731 ZoneAllocationPolicy(zone())); | |
1732 entry->value = container; | 1728 entry->value = container; |
1733 } | 1729 } |
1734 return (reinterpret_cast<IndexContainer*>(entry->value))->index; | 1730 return (reinterpret_cast<IndexContainer*>(entry->value))->index; |
1735 } | 1731 } |
1736 | 1732 |
1737 LocalType TypeOf(Expression* expr) { return TypeFrom(typer_->TypeOf(expr)); } | 1733 LocalType TypeOf(Expression* expr) { return TypeFrom(typer_->TypeOf(expr)); } |
1738 | 1734 |
1739 LocalType TypeFrom(AsmType* type) { | 1735 LocalType TypeFrom(AsmType* type) { |
1740 if (type->IsA(AsmType::Intish())) { | 1736 if (type->IsA(AsmType::Intish())) { |
1741 return kAstI32; | 1737 return kAstI32; |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1788 AsmWasmBuilderImpl impl(isolate_, zone_, literal_, typer_); | 1784 AsmWasmBuilderImpl impl(isolate_, zone_, literal_, typer_); |
1789 impl.Build(); | 1785 impl.Build(); |
1790 *foreign_args = impl.GetForeignArgs(); | 1786 *foreign_args = impl.GetForeignArgs(); |
1791 ZoneBuffer* buffer = new (zone_) ZoneBuffer(zone_); | 1787 ZoneBuffer* buffer = new (zone_) ZoneBuffer(zone_); |
1792 impl.builder_->WriteTo(*buffer); | 1788 impl.builder_->WriteTo(*buffer); |
1793 return buffer; | 1789 return buffer; |
1794 } | 1790 } |
1795 } // namespace wasm | 1791 } // namespace wasm |
1796 } // namespace internal | 1792 } // namespace internal |
1797 } // namespace v8 | 1793 } // namespace v8 |
OLD | NEW |