| 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/macro-assembler.h" | 5 #include "src/macro-assembler.h" |
| 6 #include "src/objects.h" | 6 #include "src/objects.h" |
| 7 #include "src/v8.h" | 7 #include "src/v8.h" |
| 8 | 8 |
| 9 #include "src/simulator.h" | 9 #include "src/simulator.h" |
| 10 | 10 |
| (...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 375 } | 375 } |
| 376 | 376 |
| 377 // Instantiates a wasm module as a JSObject. | 377 // Instantiates a wasm module as a JSObject. |
| 378 // * allocates a backing store of {mem_size} bytes. | 378 // * allocates a backing store of {mem_size} bytes. |
| 379 // * installs a named property "memory" for that buffer if exported | 379 // * installs a named property "memory" for that buffer if exported |
| 380 // * installs named properties on the object for exported functions | 380 // * installs named properties on the object for exported functions |
| 381 // * compiles wasm code to machine code | 381 // * compiles wasm code to machine code |
| 382 MaybeHandle<JSObject> WasmModule::Instantiate(Isolate* isolate, | 382 MaybeHandle<JSObject> WasmModule::Instantiate(Isolate* isolate, |
| 383 Handle<JSObject> ffi, | 383 Handle<JSObject> ffi, |
| 384 Handle<JSArrayBuffer> memory) { | 384 Handle<JSArrayBuffer> memory) { |
| 385 HistogramTimerScope wasm_instantiate_time_scope( | 385 HistogramTimerScope wasm_instantiate_module_time_scope( |
| 386 isolate->counters()->wasm_instantiate_time()); | 386 isolate->counters()->wasm_instantiate_module_time()); |
| 387 this->shared_isolate = isolate; // TODO(titzer): have a real shared isolate. | 387 this->shared_isolate = isolate; // TODO(titzer): have a real shared isolate. |
| 388 ErrorThrower thrower(isolate, "WasmModule::Instantiate()"); | 388 ErrorThrower thrower(isolate, "WasmModule::Instantiate()"); |
| 389 Factory* factory = isolate->factory(); | 389 Factory* factory = isolate->factory(); |
| 390 | 390 |
| 391 //------------------------------------------------------------------------- | 391 //------------------------------------------------------------------------- |
| 392 // Allocate the instance and its JS counterpart. | 392 // Allocate the instance and its JS counterpart. |
| 393 //------------------------------------------------------------------------- | 393 //------------------------------------------------------------------------- |
| 394 Handle<Map> map = factory->NewMap( | 394 Handle<Map> map = factory->NewMap( |
| 395 JS_OBJECT_TYPE, | 395 JS_OBJECT_TYPE, |
| 396 JSObject::kHeaderSize + kWasmModuleInternalFieldCount * kPointerSize); | 396 JSObject::kHeaderSize + kWasmModuleInternalFieldCount * kPointerSize); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 423 // Allocate the globals area if necessary. | 423 // Allocate the globals area if necessary. |
| 424 //------------------------------------------------------------------------- | 424 //------------------------------------------------------------------------- |
| 425 if (!AllocateGlobals(&thrower, isolate, &instance)) { | 425 if (!AllocateGlobals(&thrower, isolate, &instance)) { |
| 426 return MaybeHandle<JSObject>(); | 426 return MaybeHandle<JSObject>(); |
| 427 } | 427 } |
| 428 if (!instance.globals_buffer.is_null()) { | 428 if (!instance.globals_buffer.is_null()) { |
| 429 instance.js_object->SetInternalField(kWasmGlobalsArrayBuffer, | 429 instance.js_object->SetInternalField(kWasmGlobalsArrayBuffer, |
| 430 *instance.globals_buffer); | 430 *instance.globals_buffer); |
| 431 } | 431 } |
| 432 | 432 |
| 433 HistogramTimerScope wasm_compile_time_scope( | 433 HistogramTimerScope wasm_compile_module_time_scope( |
| 434 isolate->counters()->wasm_compile_time()); | 434 isolate->counters()->wasm_compile_module_time()); |
| 435 | 435 |
| 436 //------------------------------------------------------------------------- | 436 //------------------------------------------------------------------------- |
| 437 // Compile wrappers to imported functions. | 437 // Compile wrappers to imported functions. |
| 438 //------------------------------------------------------------------------- | 438 //------------------------------------------------------------------------- |
| 439 uint32_t index = 0; | 439 uint32_t index = 0; |
| 440 instance.function_table = BuildFunctionTable(isolate, this); | 440 instance.function_table = BuildFunctionTable(isolate, this); |
| 441 WasmLinker linker(isolate, functions.size()); | 441 WasmLinker linker(isolate, functions.size()); |
| 442 ModuleEnv module_env; | 442 ModuleEnv module_env; |
| 443 module_env.module = this; | 443 module_env.module = this; |
| 444 module_env.instance = &instance; | 444 module_env.instance = &instance; |
| (...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 705 } | 705 } |
| 706 if (result->IsHeapNumber()) { | 706 if (result->IsHeapNumber()) { |
| 707 return static_cast<int32_t>(HeapNumber::cast(*result)->value()); | 707 return static_cast<int32_t>(HeapNumber::cast(*result)->value()); |
| 708 } | 708 } |
| 709 thrower.Error("WASM.compileRun() failed: Return value should be number"); | 709 thrower.Error("WASM.compileRun() failed: Return value should be number"); |
| 710 return -1; | 710 return -1; |
| 711 } | 711 } |
| 712 } // namespace wasm | 712 } // namespace wasm |
| 713 } // namespace internal | 713 } // namespace internal |
| 714 } // namespace v8 | 714 } // namespace v8 |
| OLD | NEW |