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 #ifndef V8_WASM_MODULE_H_ | 5 #ifndef V8_WASM_MODULE_H_ |
6 #define V8_WASM_MODULE_H_ | 6 #define V8_WASM_MODULE_H_ |
7 | 7 |
8 #include <memory> | 8 #include <memory> |
9 | 9 |
10 #include "src/api.h" | 10 #include "src/api.h" |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
147 Zone* owned_zone; | 147 Zone* owned_zone; |
148 uint32_t min_mem_pages = 0; // minimum size of the memory in 64k pages | 148 uint32_t min_mem_pages = 0; // minimum size of the memory in 64k pages |
149 uint32_t max_mem_pages = 0; // maximum size of the memory in 64k pages | 149 uint32_t max_mem_pages = 0; // maximum size of the memory in 64k pages |
150 bool has_max_mem = false; // try if a maximum memory size exists | 150 bool has_max_mem = false; // try if a maximum memory size exists |
151 bool has_memory = false; // true if the memory was defined or imported | 151 bool has_memory = false; // true if the memory was defined or imported |
152 bool mem_export = false; // true if the memory is exported | 152 bool mem_export = false; // true if the memory is exported |
153 // TODO(wasm): reconcile start function index being an int with | 153 // TODO(wasm): reconcile start function index being an int with |
154 // the fact that we index on uint32_t, so we may technically not be | 154 // the fact that we index on uint32_t, so we may technically not be |
155 // able to represent some start_function_index -es. | 155 // able to represent some start_function_index -es. |
156 int start_function_index = -1; // start function, if any | 156 int start_function_index = -1; // start function, if any |
157 ModuleOrigin origin = kWasmOrigin; // origin of the module | |
158 | 157 |
159 std::vector<WasmGlobal> globals; // globals in this module. | 158 std::vector<WasmGlobal> globals; // globals in this module. |
160 uint32_t globals_size = 0; // size of globals table. | 159 uint32_t globals_size = 0; // size of globals table. |
161 uint32_t num_imported_functions = 0; // number of imported functions. | 160 uint32_t num_imported_functions = 0; // number of imported functions. |
162 uint32_t num_declared_functions = 0; // number of declared functions. | 161 uint32_t num_declared_functions = 0; // number of declared functions. |
163 uint32_t num_exported_functions = 0; // number of exported functions. | 162 uint32_t num_exported_functions = 0; // number of exported functions. |
164 std::vector<FunctionSig*> signatures; // signatures in this module. | 163 std::vector<FunctionSig*> signatures; // signatures in this module. |
165 std::vector<WasmFunction> functions; // functions in this module. | 164 std::vector<WasmFunction> functions; // functions in this module. |
166 std::vector<WasmDataSegment> data_segments; // data segments in this module. | 165 std::vector<WasmDataSegment> data_segments; // data segments in this module. |
167 std::vector<WasmIndirectFunctionTable> function_tables; // function tables. | 166 std::vector<WasmIndirectFunctionTable> function_tables; // function tables. |
168 std::vector<WasmImport> import_table; // import table. | 167 std::vector<WasmImport> import_table; // import table. |
169 std::vector<WasmExport> export_table; // export table. | 168 std::vector<WasmExport> export_table; // export table. |
170 std::vector<WasmTableInit> table_inits; // initializations of tables | 169 std::vector<WasmTableInit> table_inits; // initializations of tables |
171 // We store the semaphore here to extend its lifetime. In <libc-2.21, which we | 170 // We store the semaphore here to extend its lifetime. In <libc-2.21, which we |
172 // use on the try bots, semaphore::Wait() can return while some compilation | 171 // use on the try bots, semaphore::Wait() can return while some compilation |
173 // tasks are still executing semaphore::Signal(). If the semaphore is cleaned | 172 // tasks are still executing semaphore::Signal(). If the semaphore is cleaned |
174 // up right after semaphore::Wait() returns, then this can cause an | 173 // up right after semaphore::Wait() returns, then this can cause an |
175 // invalid-semaphore error in the compilation tasks. | 174 // invalid-semaphore error in the compilation tasks. |
176 // TODO(wasm): Move this semaphore back to CompileInParallel when the try bots | 175 // TODO(wasm): Move this semaphore back to CompileInParallel when the try bots |
177 // switch to libc-2.21 or higher. | 176 // switch to libc-2.21 or higher. |
178 std::unique_ptr<base::Semaphore> pending_tasks; | 177 std::unique_ptr<base::Semaphore> pending_tasks; |
179 | 178 |
180 WasmModule() : WasmModule(nullptr) {} | 179 WasmModule() : WasmModule(nullptr) {} |
181 WasmModule(Zone* owned_zone); | 180 WasmModule(Zone* owned_zone); |
182 ~WasmModule() { | 181 ~WasmModule() { |
183 if (owned_zone) delete owned_zone; | 182 if (owned_zone) delete owned_zone; |
184 } | 183 } |
| 184 |
| 185 ModuleOrigin get_origin() const { return origin; } |
| 186 void set_origin(ModuleOrigin new_value) { origin = new_value; } |
| 187 bool is_wasm() const { return origin == kWasmOrigin; } |
| 188 bool is_asm_js() const { return origin == kAsmJsOrigin; } |
| 189 |
| 190 private: |
| 191 // TODO(kschimpf) - Encapsulate more fields. |
| 192 ModuleOrigin origin = kWasmOrigin; // origin of the module |
185 }; | 193 }; |
186 | 194 |
187 typedef Managed<WasmModule> WasmModuleWrapper; | 195 typedef Managed<WasmModule> WasmModuleWrapper; |
188 | 196 |
189 // An instantiated WASM module, including memory, function table, etc. | 197 // An instantiated WASM module, including memory, function table, etc. |
190 struct WasmInstance { | 198 struct WasmInstance { |
191 const WasmModule* module; // static representation of the module. | 199 const WasmModule* module; // static representation of the module. |
192 // -- Heap allocated -------------------------------------------------------- | 200 // -- Heap allocated -------------------------------------------------------- |
193 Handle<Context> context; // JavaScript native context. | 201 Handle<Context> context; // JavaScript native context. |
194 std::vector<Handle<FixedArray>> function_tables; // indirect function tables. | 202 std::vector<Handle<FixedArray>> function_tables; // indirect function tables. |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
311 } | 319 } |
312 FunctionSig* GetSignature(uint32_t index) { | 320 FunctionSig* GetSignature(uint32_t index) { |
313 DCHECK(IsValidSignature(index)); | 321 DCHECK(IsValidSignature(index)); |
314 return module->signatures[index]; | 322 return module->signatures[index]; |
315 } | 323 } |
316 const WasmIndirectFunctionTable* GetTable(uint32_t index) const { | 324 const WasmIndirectFunctionTable* GetTable(uint32_t index) const { |
317 DCHECK(IsValidTable(index)); | 325 DCHECK(IsValidTable(index)); |
318 return &module->function_tables[index]; | 326 return &module->function_tables[index]; |
319 } | 327 } |
320 | 328 |
321 bool asm_js() { return module->origin == kAsmJsOrigin; } | 329 bool asm_js() { return module->is_asm_js(); } |
322 | 330 |
323 // Only used for testing. | 331 // Only used for testing. |
324 Handle<Code> GetFunctionCode(uint32_t index) { | 332 Handle<Code> GetFunctionCode(uint32_t index) { |
325 DCHECK_NOT_NULL(instance); | 333 DCHECK_NOT_NULL(instance); |
326 return instance->function_code[index]; | 334 return instance->function_code[index]; |
327 } | 335 } |
328 | 336 |
329 // TODO(titzer): move these into src/compiler/wasm-compiler.cc | 337 // TODO(titzer): move these into src/compiler/wasm-compiler.cc |
330 static compiler::CallDescriptor* GetWasmCallDescriptor(Zone* zone, | 338 static compiler::CallDescriptor* GetWasmCallDescriptor(Zone* zone, |
331 FunctionSig* sig); | 339 FunctionSig* sig); |
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
504 int instance_count); | 512 int instance_count); |
505 void ValidateModuleState(Isolate* isolate, Handle<WasmModuleObject> module_obj); | 513 void ValidateModuleState(Isolate* isolate, Handle<WasmModuleObject> module_obj); |
506 void ValidateOrphanedInstance(Isolate* isolate, | 514 void ValidateOrphanedInstance(Isolate* isolate, |
507 Handle<WasmInstanceObject> instance); | 515 Handle<WasmInstanceObject> instance); |
508 } // namespace testing | 516 } // namespace testing |
509 } // namespace wasm | 517 } // namespace wasm |
510 } // namespace internal | 518 } // namespace internal |
511 } // namespace v8 | 519 } // namespace v8 |
512 | 520 |
513 #endif // V8_WASM_MODULE_H_ | 521 #endif // V8_WASM_MODULE_H_ |
OLD | NEW |