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 <stdlib.h> | 5 #include <stdlib.h> |
6 #include <string.h> | 6 #include <string.h> |
7 | 7 |
8 #include "src/snapshot/code-serializer.h" | 8 #include "src/snapshot/code-serializer.h" |
9 #include "src/version.h" | 9 #include "src/version.h" |
10 #include "src/wasm/module-decoder.h" | 10 #include "src/wasm/module-decoder.h" |
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
270 | 270 |
271 Isolate* serialization_isolate = CcTest::InitIsolateOnce(); | 271 Isolate* serialization_isolate = CcTest::InitIsolateOnce(); |
272 ErrorThrower thrower(serialization_isolate, ""); | 272 ErrorThrower thrower(serialization_isolate, ""); |
273 uint8_t* bytes = nullptr; | 273 uint8_t* bytes = nullptr; |
274 size_t bytes_size = 0; | 274 size_t bytes_size = 0; |
275 { | 275 { |
276 HandleScope scope(serialization_isolate); | 276 HandleScope scope(serialization_isolate); |
277 testing::SetupIsolateForWasmModule(serialization_isolate); | 277 testing::SetupIsolateForWasmModule(serialization_isolate); |
278 | 278 |
279 ModuleResult decoding_result = | 279 ModuleResult decoding_result = |
280 DecodeWasmModule(serialization_isolate, zone(), buffer.begin(), | 280 DecodeWasmModule(serialization_isolate, buffer.begin(), buffer.end(), |
281 buffer.end(), false, kWasmOrigin); | 281 false, kWasmOrigin); |
282 std::unique_ptr<const WasmModule> module(decoding_result.val); | |
283 CHECK(!decoding_result.failed()); | 282 CHECK(!decoding_result.failed()); |
284 | 283 |
| 284 Handle<WasmModuleWrapper> module_wrapper = WasmModuleWrapper::New( |
| 285 serialization_isolate, const_cast<WasmModule*>(decoding_result.val)); |
| 286 |
285 MaybeHandle<WasmCompiledModule> compiled_module = | 287 MaybeHandle<WasmCompiledModule> compiled_module = |
286 module->CompileFunctions(serialization_isolate, &thrower); | 288 decoding_result.val->CompileFunctions(serialization_isolate, |
| 289 module_wrapper, &thrower); |
287 CHECK(!compiled_module.is_null()); | 290 CHECK(!compiled_module.is_null()); |
288 Handle<JSObject> module_obj = CreateCompiledModuleObject( | 291 Handle<JSObject> module_obj = CreateWasmModuleObject( |
289 serialization_isolate, compiled_module.ToHandleChecked(), | 292 serialization_isolate, compiled_module.ToHandleChecked(), |
290 ModuleOrigin::kWasmOrigin); | 293 ModuleOrigin::kWasmOrigin); |
291 v8::Local<v8::Object> v8_module_obj = v8::Utils::ToLocal(module_obj); | 294 v8::Local<v8::Object> v8_module_obj = v8::Utils::ToLocal(module_obj); |
292 CHECK(v8_module_obj->IsWebAssemblyCompiledModule()); | 295 CHECK(v8_module_obj->IsWebAssemblyCompiledModule()); |
293 | 296 |
294 v8::Local<v8::WasmCompiledModule> v8_compiled_module = | 297 v8::Local<v8::WasmCompiledModule> v8_compiled_module = |
295 v8_module_obj.As<v8::WasmCompiledModule>(); | 298 v8_module_obj.As<v8::WasmCompiledModule>(); |
296 v8::Local<v8::String> uncompiled_bytes = | 299 v8::Local<v8::String> uncompiled_bytes = |
297 v8_compiled_module->GetWasmWireBytes(); | 300 v8_compiled_module->GetWasmWireBytes(); |
298 bytes_size = static_cast<size_t>(uncompiled_bytes->Length()); | 301 bytes_size = static_cast<size_t>(uncompiled_bytes->Length()); |
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
463 WASM_I32V(121)}; | 466 WASM_I32V(121)}; |
464 f->EmitCode(code, sizeof(code)); | 467 f->EmitCode(code, sizeof(code)); |
465 ZoneBuffer buffer(&zone); | 468 ZoneBuffer buffer(&zone); |
466 builder->WriteTo(buffer); | 469 builder->WriteTo(buffer); |
467 | 470 |
468 HandleScope scope(isolate); | 471 HandleScope scope(isolate); |
469 testing::SetupIsolateForWasmModule(isolate); | 472 testing::SetupIsolateForWasmModule(isolate); |
470 ErrorThrower thrower(isolate, "Test"); | 473 ErrorThrower thrower(isolate, "Test"); |
471 const Handle<JSObject> instance = | 474 const Handle<JSObject> instance = |
472 testing::CompileInstantiateWasmModuleForTesting( | 475 testing::CompileInstantiateWasmModuleForTesting( |
473 isolate, &thrower, &zone, buffer.begin(), buffer.end(), | 476 isolate, &thrower, buffer.begin(), buffer.end(), |
474 ModuleOrigin::kWasmOrigin); | 477 ModuleOrigin::kWasmOrigin); |
475 CHECK(!instance.is_null()); | 478 CHECK(!instance.is_null()); |
476 | 479 |
477 MaybeHandle<JSArrayBuffer> maybe_memory = | 480 MaybeHandle<JSArrayBuffer> maybe_memory = |
478 GetInstanceMemory(isolate, instance); | 481 GetInstanceMemory(isolate, instance); |
479 Handle<JSArrayBuffer> memory = maybe_memory.ToHandleChecked(); | 482 Handle<JSArrayBuffer> memory = maybe_memory.ToHandleChecked(); |
480 int32_t* memory_array = reinterpret_cast<int32_t*>(memory->backing_store()); | 483 int32_t* memory_array = reinterpret_cast<int32_t*>(memory->backing_store()); |
481 | 484 |
482 InterruptThread thread(isolate, memory_array); | 485 InterruptThread thread(isolate, memory_array); |
483 thread.Start(); | 486 thread.Start(); |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
537 WASM_LOAD_MEM(MachineType::Int32(), WASM_I32V(index))}; | 540 WASM_LOAD_MEM(MachineType::Int32(), WASM_I32V(index))}; |
538 f->EmitCode(code, sizeof(code)); | 541 f->EmitCode(code, sizeof(code)); |
539 | 542 |
540 HandleScope scope(isolate); | 543 HandleScope scope(isolate); |
541 ZoneBuffer buffer(&zone); | 544 ZoneBuffer buffer(&zone); |
542 builder->WriteTo(buffer); | 545 builder->WriteTo(buffer); |
543 testing::SetupIsolateForWasmModule(isolate); | 546 testing::SetupIsolateForWasmModule(isolate); |
544 | 547 |
545 ErrorThrower thrower(isolate, "Test"); | 548 ErrorThrower thrower(isolate, "Test"); |
546 Handle<JSObject> instance = testing::CompileInstantiateWasmModuleForTesting( | 549 Handle<JSObject> instance = testing::CompileInstantiateWasmModuleForTesting( |
547 isolate, &thrower, &zone, buffer.begin(), buffer.end(), | 550 isolate, &thrower, buffer.begin(), buffer.end(), |
548 ModuleOrigin::kWasmOrigin); | 551 ModuleOrigin::kWasmOrigin); |
549 CHECK(!instance.is_null()); | 552 CHECK(!instance.is_null()); |
550 | 553 |
551 // Initial memory size is 16 pages, should trap till index > MemSize on | 554 // Initial memory size is 16 pages, should trap till index > MemSize on |
552 // consecutive GrowMem calls | 555 // consecutive GrowMem calls |
553 for (uint32_t i = 1; i < 5; i++) { | 556 for (uint32_t i = 1; i < 5; i++) { |
554 Handle<Object> params[1] = {Handle<Object>(Smi::FromInt(i), isolate)}; | 557 Handle<Object> params[1] = {Handle<Object>(Smi::FromInt(i), isolate)}; |
555 v8::TryCatch try_catch(reinterpret_cast<v8::Isolate*>(isolate)); | 558 v8::TryCatch try_catch(reinterpret_cast<v8::Isolate*>(isolate)); |
556 testing::RunWasmModuleForTesting(isolate, instance, 1, params, | 559 testing::RunWasmModuleForTesting(isolate, instance, 1, params, |
557 ModuleOrigin::kWasmOrigin); | 560 ModuleOrigin::kWasmOrigin); |
(...skipping 24 matching lines...) Expand all Loading... |
582 WASM_LOAD_MEM(MachineType::Int32(), WASM_GET_LOCAL(0))}; | 585 WASM_LOAD_MEM(MachineType::Int32(), WASM_GET_LOCAL(0))}; |
583 f->EmitCode(code, sizeof(code)); | 586 f->EmitCode(code, sizeof(code)); |
584 | 587 |
585 HandleScope scope(isolate); | 588 HandleScope scope(isolate); |
586 ZoneBuffer buffer(&zone); | 589 ZoneBuffer buffer(&zone); |
587 builder->WriteTo(buffer); | 590 builder->WriteTo(buffer); |
588 testing::SetupIsolateForWasmModule(isolate); | 591 testing::SetupIsolateForWasmModule(isolate); |
589 | 592 |
590 ErrorThrower thrower(isolate, "Test"); | 593 ErrorThrower thrower(isolate, "Test"); |
591 Handle<JSObject> instance = testing::CompileInstantiateWasmModuleForTesting( | 594 Handle<JSObject> instance = testing::CompileInstantiateWasmModuleForTesting( |
592 isolate, &thrower, &zone, buffer.begin(), buffer.end(), | 595 isolate, &thrower, buffer.begin(), buffer.end(), |
593 ModuleOrigin::kWasmOrigin); | 596 ModuleOrigin::kWasmOrigin); |
594 | 597 |
595 CHECK(!instance.is_null()); | 598 CHECK(!instance.is_null()); |
596 | 599 |
597 // Initial memory size is 16 pages, should trap till index > MemSize on | 600 // Initial memory size is 16 pages, should trap till index > MemSize on |
598 // consecutive GrowMem calls | 601 // consecutive GrowMem calls |
599 for (int i = 1; i < 5; i++) { | 602 for (int i = 1; i < 5; i++) { |
600 Handle<Object> params[1] = { | 603 Handle<Object> params[1] = { |
601 Handle<Object>(Smi::FromInt((16 + i) * kPageSize - 3), isolate)}; | 604 Handle<Object>(Smi::FromInt((16 + i) * kPageSize - 3), isolate)}; |
602 v8::TryCatch try_catch(reinterpret_cast<v8::Isolate*>(isolate)); | 605 v8::TryCatch try_catch(reinterpret_cast<v8::Isolate*>(isolate)); |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
706 | 709 |
707 TEST(Run_WasmModule_Global_f32) { | 710 TEST(Run_WasmModule_Global_f32) { |
708 RunWasmModuleGlobalInitTest<float>(kAstF32, -983.9f); | 711 RunWasmModuleGlobalInitTest<float>(kAstF32, -983.9f); |
709 RunWasmModuleGlobalInitTest<float>(kAstF32, 1122.99f); | 712 RunWasmModuleGlobalInitTest<float>(kAstF32, 1122.99f); |
710 } | 713 } |
711 | 714 |
712 TEST(Run_WasmModule_Global_f64) { | 715 TEST(Run_WasmModule_Global_f64) { |
713 RunWasmModuleGlobalInitTest<double>(kAstF64, -833.9); | 716 RunWasmModuleGlobalInitTest<double>(kAstF64, -833.9); |
714 RunWasmModuleGlobalInitTest<double>(kAstF64, 86374.25); | 717 RunWasmModuleGlobalInitTest<double>(kAstF64, 86374.25); |
715 } | 718 } |
OLD | NEW |