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 646 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
657 struct FunctionTableIndices : public ZoneObject { | 657 struct FunctionTableIndices : public ZoneObject { |
658 uint32_t start_index; | 658 uint32_t start_index; |
659 uint32_t signature_index; | 659 uint32_t signature_index; |
660 }; | 660 }; |
661 | 661 |
662 void InsertFunctionTable(Variable* v, uint32_t start_index, | 662 void InsertFunctionTable(Variable* v, uint32_t start_index, |
663 uint32_t signature_index) { | 663 uint32_t signature_index) { |
664 FunctionTableIndices* container = new (zone()) FunctionTableIndices(); | 664 FunctionTableIndices* container = new (zone()) FunctionTableIndices(); |
665 container->start_index = start_index; | 665 container->start_index = start_index; |
666 container->signature_index = signature_index; | 666 container->signature_index = signature_index; |
667 ZoneHashMap::Entry* entry = | 667 ZoneHashMap::Entry* entry = function_tables_.LookupOrInsert( |
668 function_tables_.LookupOrInsert(v, ComputePointerHash(v)); | 668 v, ComputePointerHash(v), ZoneAllocationPolicy(zone())); |
669 entry->value = container; | 669 entry->value = container; |
670 } | 670 } |
671 | 671 |
672 FunctionTableIndices* LookupFunctionTable(Variable* v) { | 672 FunctionTableIndices* LookupFunctionTable(Variable* v) { |
673 ZoneHashMap::Entry* entry = | 673 ZoneHashMap::Entry* entry = |
674 function_tables_.Lookup(v, ComputePointerHash(v)); | 674 function_tables_.Lookup(v, ComputePointerHash(v)); |
675 DCHECK_NOT_NULL(entry); | 675 DCHECK_NOT_NULL(entry); |
676 return reinterpret_cast<FunctionTableIndices*>(entry->value); | 676 return reinterpret_cast<FunctionTableIndices*>(entry->value); |
677 } | 677 } |
678 | 678 |
(...skipping 14 matching lines...) Expand all Loading... |
693 public: | 693 public: |
694 explicit ImportedFunctionTable(AsmWasmBuilderImpl* builder) | 694 explicit ImportedFunctionTable(AsmWasmBuilderImpl* builder) |
695 : table_(base::HashMap::PointersMatch, | 695 : table_(base::HashMap::PointersMatch, |
696 ZoneHashMap::kDefaultHashMapCapacity, | 696 ZoneHashMap::kDefaultHashMapCapacity, |
697 ZoneAllocationPolicy(builder->zone())), | 697 ZoneAllocationPolicy(builder->zone())), |
698 builder_(builder) {} | 698 builder_(builder) {} |
699 | 699 |
700 void AddImport(Variable* v, const char* name, int name_length) { | 700 void AddImport(Variable* v, const char* name, int name_length) { |
701 ImportedFunctionIndices* indices = new (builder_->zone()) | 701 ImportedFunctionIndices* indices = new (builder_->zone()) |
702 ImportedFunctionIndices(name, name_length, builder_->zone()); | 702 ImportedFunctionIndices(name, name_length, builder_->zone()); |
703 ZoneHashMap::Entry* entry = | 703 ZoneHashMap::Entry* entry = table_.LookupOrInsert( |
704 table_.LookupOrInsert(v, ComputePointerHash(v)); | 704 v, ComputePointerHash(v), ZoneAllocationPolicy(builder_->zone())); |
705 entry->value = indices; | 705 entry->value = indices; |
706 } | 706 } |
707 | 707 |
708 uint32_t GetFunctionIndex(Variable* v, FunctionSig* sig) { | 708 uint32_t GetFunctionIndex(Variable* v, FunctionSig* sig) { |
709 ZoneHashMap::Entry* entry = table_.Lookup(v, ComputePointerHash(v)); | 709 ZoneHashMap::Entry* entry = table_.Lookup(v, ComputePointerHash(v)); |
710 DCHECK_NOT_NULL(entry); | 710 DCHECK_NOT_NULL(entry); |
711 ImportedFunctionIndices* indices = | 711 ImportedFunctionIndices* indices = |
712 reinterpret_cast<ImportedFunctionIndices*>(entry->value); | 712 reinterpret_cast<ImportedFunctionIndices*>(entry->value); |
713 WasmModuleBuilder::SignatureMap::iterator pos = | 713 WasmModuleBuilder::SignatureMap::iterator pos = |
714 indices->signature_to_index_.find(sig); | 714 indices->signature_to_index_.find(sig); |
(...skipping 972 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1687 uint32_t LookupOrInsertLocal(Variable* v, LocalType type) { | 1687 uint32_t LookupOrInsertLocal(Variable* v, LocalType type) { |
1688 DCHECK_NOT_NULL(current_function_builder_); | 1688 DCHECK_NOT_NULL(current_function_builder_); |
1689 ZoneHashMap::Entry* entry = | 1689 ZoneHashMap::Entry* entry = |
1690 local_variables_.Lookup(v, ComputePointerHash(v)); | 1690 local_variables_.Lookup(v, ComputePointerHash(v)); |
1691 if (entry == nullptr) { | 1691 if (entry == nullptr) { |
1692 uint32_t index; | 1692 uint32_t index; |
1693 DCHECK(!v->IsParameter()); | 1693 DCHECK(!v->IsParameter()); |
1694 index = current_function_builder_->AddLocal(type); | 1694 index = current_function_builder_->AddLocal(type); |
1695 IndexContainer* container = new (zone()) IndexContainer(); | 1695 IndexContainer* container = new (zone()) IndexContainer(); |
1696 container->index = index; | 1696 container->index = index; |
1697 entry = local_variables_.LookupOrInsert(v, ComputePointerHash(v)); | 1697 entry = local_variables_.LookupOrInsert(v, ComputePointerHash(v), |
| 1698 ZoneAllocationPolicy(zone())); |
1698 entry->value = container; | 1699 entry->value = container; |
1699 } | 1700 } |
1700 return (reinterpret_cast<IndexContainer*>(entry->value))->index; | 1701 return (reinterpret_cast<IndexContainer*>(entry->value))->index; |
1701 } | 1702 } |
1702 | 1703 |
1703 void InsertParameter(Variable* v, LocalType type, uint32_t index) { | 1704 void InsertParameter(Variable* v, LocalType type, uint32_t index) { |
1704 DCHECK(v->IsParameter()); | 1705 DCHECK(v->IsParameter()); |
1705 DCHECK_NOT_NULL(current_function_builder_); | 1706 DCHECK_NOT_NULL(current_function_builder_); |
1706 ZoneHashMap::Entry* entry = | 1707 ZoneHashMap::Entry* entry = |
1707 local_variables_.Lookup(v, ComputePointerHash(v)); | 1708 local_variables_.Lookup(v, ComputePointerHash(v)); |
1708 DCHECK_NULL(entry); | 1709 DCHECK_NULL(entry); |
1709 IndexContainer* container = new (zone()) IndexContainer(); | 1710 IndexContainer* container = new (zone()) IndexContainer(); |
1710 container->index = index; | 1711 container->index = index; |
1711 entry = local_variables_.LookupOrInsert(v, ComputePointerHash(v)); | 1712 entry = local_variables_.LookupOrInsert(v, ComputePointerHash(v), |
| 1713 ZoneAllocationPolicy(zone())); |
1712 entry->value = container; | 1714 entry->value = container; |
1713 } | 1715 } |
1714 | 1716 |
1715 uint32_t LookupOrInsertGlobal(Variable* v, LocalType type) { | 1717 uint32_t LookupOrInsertGlobal(Variable* v, LocalType type) { |
1716 ZoneHashMap::Entry* entry = | 1718 ZoneHashMap::Entry* entry = |
1717 global_variables_.Lookup(v, ComputePointerHash(v)); | 1719 global_variables_.Lookup(v, ComputePointerHash(v)); |
1718 if (entry == nullptr) { | 1720 if (entry == nullptr) { |
1719 uint32_t index = builder_->AddGlobal(type, 0); | 1721 uint32_t index = builder_->AddGlobal(type, 0); |
1720 IndexContainer* container = new (zone()) IndexContainer(); | 1722 IndexContainer* container = new (zone()) IndexContainer(); |
1721 container->index = index; | 1723 container->index = index; |
1722 entry = global_variables_.LookupOrInsert(v, ComputePointerHash(v)); | 1724 entry = global_variables_.LookupOrInsert(v, ComputePointerHash(v), |
| 1725 ZoneAllocationPolicy(zone())); |
1723 entry->value = container; | 1726 entry->value = container; |
1724 } | 1727 } |
1725 return (reinterpret_cast<IndexContainer*>(entry->value))->index; | 1728 return (reinterpret_cast<IndexContainer*>(entry->value))->index; |
1726 } | 1729 } |
1727 | 1730 |
1728 uint32_t LookupOrInsertFunction(Variable* v) { | 1731 uint32_t LookupOrInsertFunction(Variable* v) { |
1729 DCHECK_NOT_NULL(builder_); | 1732 DCHECK_NOT_NULL(builder_); |
1730 ZoneHashMap::Entry* entry = functions_.Lookup(v, ComputePointerHash(v)); | 1733 ZoneHashMap::Entry* entry = functions_.Lookup(v, ComputePointerHash(v)); |
1731 if (entry == nullptr) { | 1734 if (entry == nullptr) { |
1732 uint32_t index = builder_->AddFunction(); | 1735 uint32_t index = builder_->AddFunction(); |
1733 IndexContainer* container = new (zone()) IndexContainer(); | 1736 IndexContainer* container = new (zone()) IndexContainer(); |
1734 container->index = index; | 1737 container->index = index; |
1735 entry = functions_.LookupOrInsert(v, ComputePointerHash(v)); | 1738 entry = functions_.LookupOrInsert(v, ComputePointerHash(v), |
| 1739 ZoneAllocationPolicy(zone())); |
1736 entry->value = container; | 1740 entry->value = container; |
1737 } | 1741 } |
1738 return (reinterpret_cast<IndexContainer*>(entry->value))->index; | 1742 return (reinterpret_cast<IndexContainer*>(entry->value))->index; |
1739 } | 1743 } |
1740 | 1744 |
1741 LocalType TypeOf(Expression* expr) { return TypeFrom(typer_->TypeOf(expr)); } | 1745 LocalType TypeOf(Expression* expr) { return TypeFrom(typer_->TypeOf(expr)); } |
1742 | 1746 |
1743 LocalType TypeFrom(AsmType* type) { | 1747 LocalType TypeFrom(AsmType* type) { |
1744 if (type->IsA(AsmType::Intish())) { | 1748 if (type->IsA(AsmType::Intish())) { |
1745 return kAstI32; | 1749 return kAstI32; |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1796 impl.builder_->WriteTo(*buffer); | 1800 impl.builder_->WriteTo(*buffer); |
1797 return buffer; | 1801 return buffer; |
1798 } | 1802 } |
1799 | 1803 |
1800 const char* AsmWasmBuilder::foreign_init_name = "__foreign_init__"; | 1804 const char* AsmWasmBuilder::foreign_init_name = "__foreign_init__"; |
1801 const char* AsmWasmBuilder::single_function_name = "__single_function__"; | 1805 const char* AsmWasmBuilder::single_function_name = "__single_function__"; |
1802 | 1806 |
1803 } // namespace wasm | 1807 } // namespace wasm |
1804 } // namespace internal | 1808 } // namespace internal |
1805 } // namespace v8 | 1809 } // namespace v8 |
OLD | NEW |