Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(53)

Side by Side Diff: src/wasm/wasm-module.cc

Issue 2094573002: [wasm] Cleaning up code (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/wasm/wasm-macro-gen.h ('k') | src/wasm/wasm-opcodes.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/base/atomic-utils.h" 5 #include "src/base/atomic-utils.h"
6 #include "src/macro-assembler.h" 6 #include "src/macro-assembler.h"
7 #include "src/objects.h" 7 #include "src/objects.h"
8 #include "src/property-descriptor.h" 8 #include "src/property-descriptor.h"
9 #include "src/v8.h" 9 #include "src/v8.h"
10 10
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 void* memory = isolate->array_buffer_allocator()->Allocate(size); 171 void* memory = isolate->array_buffer_allocator()->Allocate(size);
172 if (memory == nullptr) { 172 if (memory == nullptr) {
173 return Handle<JSArrayBuffer>::null(); 173 return Handle<JSArrayBuffer>::null();
174 } 174 }
175 175
176 *backing_store = reinterpret_cast<byte*>(memory); 176 *backing_store = reinterpret_cast<byte*>(memory);
177 177
178 #if DEBUG 178 #if DEBUG
179 // Double check the API allocator actually zero-initialized the memory. 179 // Double check the API allocator actually zero-initialized the memory.
180 byte* bytes = reinterpret_cast<byte*>(*backing_store); 180 byte* bytes = reinterpret_cast<byte*>(*backing_store);
181 for (size_t i = 0; i < size; i++) { 181 for (size_t i = 0; i < size; ++i) {
182 DCHECK_EQ(0, bytes[i]); 182 DCHECK_EQ(0, bytes[i]);
183 } 183 }
184 #endif 184 #endif
185 185
186 Handle<JSArrayBuffer> buffer = isolate->factory()->NewJSArrayBuffer(); 186 Handle<JSArrayBuffer> buffer = isolate->factory()->NewJSArrayBuffer();
187 JSArrayBuffer::Setup(buffer, isolate, false, memory, static_cast<int>(size)); 187 JSArrayBuffer::Setup(buffer, isolate, false, memory, static_cast<int>(size));
188 buffer->set_is_neuterable(false); 188 buffer->set_is_neuterable(false);
189 return buffer; 189 return buffer;
190 } 190 }
191 191
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 modified = true; 307 modified = true;
308 } 308 }
309 } 309 }
310 } 310 }
311 } 311 }
312 return modified; 312 return modified;
313 } 313 }
314 314
315 void LinkModuleFunctions(Isolate* isolate, 315 void LinkModuleFunctions(Isolate* isolate,
316 std::vector<Handle<Code>>& functions) { 316 std::vector<Handle<Code>>& functions) {
317 for (size_t i = 0; i < functions.size(); i++) { 317 for (size_t i = 0; i < functions.size(); ++i) {
318 Handle<Code> code = functions[i]; 318 Handle<Code> code = functions[i];
319 bool modified = LinkFunction(code, functions, Code::WASM_FUNCTION); 319 bool modified = LinkFunction(code, functions, Code::WASM_FUNCTION);
320 if (modified) { 320 if (modified) {
321 Assembler::FlushICache(isolate, code->instruction_start(), 321 Assembler::FlushICache(isolate, code->instruction_start(),
322 code->instruction_size()); 322 code->instruction_size());
323 } 323 }
324 } 324 }
325 } 325 }
326 326
327 void LinkImports(Isolate* isolate, std::vector<Handle<Code>>& functions, 327 void LinkImports(Isolate* isolate, std::vector<Handle<Code>>& functions,
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
514 instance->import_code[index] = code; 514 instance->import_code[index] = code;
515 } 515 }
516 } 516 }
517 return true; 517 return true;
518 } 518 }
519 519
520 void InitializeParallelCompilation( 520 void InitializeParallelCompilation(
521 Isolate* isolate, const std::vector<WasmFunction>& functions, 521 Isolate* isolate, const std::vector<WasmFunction>& functions,
522 std::vector<compiler::WasmCompilationUnit*>& compilation_units, 522 std::vector<compiler::WasmCompilationUnit*>& compilation_units,
523 ModuleEnv& module_env, ErrorThrower& thrower) { 523 ModuleEnv& module_env, ErrorThrower& thrower) {
524 for (uint32_t i = FLAG_skip_compiling_wasm_funcs; i < functions.size(); i++) { 524 for (uint32_t i = FLAG_skip_compiling_wasm_funcs; i < functions.size(); ++i) {
525 compilation_units[i] = new compiler::WasmCompilationUnit( 525 compilation_units[i] = new compiler::WasmCompilationUnit(
526 &thrower, isolate, &module_env, &functions[i], i); 526 &thrower, isolate, &module_env, &functions[i], i);
527 } 527 }
528 } 528 }
529 529
530 uint32_t* StartCompilationTasks( 530 uint32_t* StartCompilationTasks(
531 Isolate* isolate, 531 Isolate* isolate,
532 std::vector<compiler::WasmCompilationUnit*>& compilation_units, 532 std::vector<compiler::WasmCompilationUnit*>& compilation_units,
533 std::queue<compiler::WasmCompilationUnit*>& executed_units, 533 std::queue<compiler::WasmCompilationUnit*>& executed_units,
534 base::Semaphore* pending_tasks, base::Mutex& result_mutex, 534 base::Semaphore* pending_tasks, base::Mutex& result_mutex,
535 base::AtomicNumber<size_t>& next_unit) { 535 base::AtomicNumber<size_t>& next_unit) {
536 const size_t num_tasks = 536 const size_t num_tasks =
537 Min(static_cast<size_t>(FLAG_wasm_num_compilation_tasks), 537 Min(static_cast<size_t>(FLAG_wasm_num_compilation_tasks),
538 V8::GetCurrentPlatform()->NumberOfAvailableBackgroundThreads()); 538 V8::GetCurrentPlatform()->NumberOfAvailableBackgroundThreads());
539 uint32_t* task_ids = new uint32_t[num_tasks]; 539 uint32_t* task_ids = new uint32_t[num_tasks];
540 for (size_t i = 0; i < num_tasks; i++) { 540 for (size_t i = 0; i < num_tasks; ++i) {
541 WasmCompilationTask* task = 541 WasmCompilationTask* task =
542 new WasmCompilationTask(isolate, &compilation_units, &executed_units, 542 new WasmCompilationTask(isolate, &compilation_units, &executed_units,
543 pending_tasks, &result_mutex, &next_unit); 543 pending_tasks, &result_mutex, &next_unit);
544 task_ids[i] = task->id(); 544 task_ids[i] = task->id();
545 V8::GetCurrentPlatform()->CallOnBackgroundThread( 545 V8::GetCurrentPlatform()->CallOnBackgroundThread(
546 task, v8::Platform::kShortRunningTask); 546 task, v8::Platform::kShortRunningTask);
547 } 547 }
548 return task_ids; 548 return task_ids;
549 } 549 }
550 550
551 void WaitForCompilationTasks(Isolate* isolate, uint32_t* task_ids, 551 void WaitForCompilationTasks(Isolate* isolate, uint32_t* task_ids,
552 base::Semaphore* pending_tasks) { 552 base::Semaphore* pending_tasks) {
553 const size_t num_tasks = 553 const size_t num_tasks =
554 Min(static_cast<size_t>(FLAG_wasm_num_compilation_tasks), 554 Min(static_cast<size_t>(FLAG_wasm_num_compilation_tasks),
555 V8::GetCurrentPlatform()->NumberOfAvailableBackgroundThreads()); 555 V8::GetCurrentPlatform()->NumberOfAvailableBackgroundThreads());
556 for (size_t i = 0; i < num_tasks; i++) { 556 for (size_t i = 0; i < num_tasks; ++i) {
557 // If the task has not started yet, then we abort it. Otherwise we wait for 557 // If the task has not started yet, then we abort it. Otherwise we wait for
558 // it to finish. 558 // it to finish.
559 if (!isolate->cancelable_task_manager()->TryAbort(task_ids[i])) { 559 if (!isolate->cancelable_task_manager()->TryAbort(task_ids[i])) {
560 pending_tasks->Wait(); 560 pending_tasks->Wait();
561 } 561 }
562 } 562 }
563 } 563 }
564 564
565 void FinishCompilationUnits( 565 void FinishCompilationUnits(
566 std::queue<compiler::WasmCompilationUnit*>& executed_units, 566 std::queue<compiler::WasmCompilationUnit*>& executed_units,
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
644 // Finish the compilation of the remaining compilation units. 644 // Finish the compilation of the remaining compilation units.
645 FinishCompilationUnits(executed_units, functions, result_mutex); 645 FinishCompilationUnits(executed_units, functions, result_mutex);
646 } 646 }
647 647
648 void CompileSequentially(Isolate* isolate, const WasmModule* module, 648 void CompileSequentially(Isolate* isolate, const WasmModule* module,
649 std::vector<Handle<Code>>& functions, 649 std::vector<Handle<Code>>& functions,
650 ErrorThrower* thrower, ModuleEnv* module_env) { 650 ErrorThrower* thrower, ModuleEnv* module_env) {
651 DCHECK(!thrower->error()); 651 DCHECK(!thrower->error());
652 652
653 for (uint32_t i = FLAG_skip_compiling_wasm_funcs; 653 for (uint32_t i = FLAG_skip_compiling_wasm_funcs;
654 i < module->functions.size(); i++) { 654 i < module->functions.size(); ++i) {
655 const WasmFunction& func = module->functions[i]; 655 const WasmFunction& func = module->functions[i];
656 656
657 DCHECK_EQ(i, func.func_index); 657 DCHECK_EQ(i, func.func_index);
658 WasmName str = module->GetName(func.name_offset, func.name_length); 658 WasmName str = module->GetName(func.name_offset, func.name_length);
659 Handle<Code> code = Handle<Code>::null(); 659 Handle<Code> code = Handle<Code>::null();
660 // Compile the function. 660 // Compile the function.
661 code = compiler::WasmCompilationUnit::CompileWasmFunction( 661 code = compiler::WasmCompilationUnit::CompileWasmFunction(
662 thrower, isolate, module_env, &func); 662 thrower, isolate, module_env, &func);
663 if (code.is_null()) { 663 if (code.is_null()) {
664 thrower->Error("Compilation of #%d:%.*s failed.", i, str.length(), 664 thrower->Error("Compilation of #%d:%.*s failed.", i, str.length(),
(...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after
1122 Object* info = wasm->GetInternalField(kWasmDebugInfo); 1122 Object* info = wasm->GetInternalField(kWasmDebugInfo);
1123 if (!info->IsUndefined(wasm->GetIsolate())) return WasmDebugInfo::cast(info); 1123 if (!info->IsUndefined(wasm->GetIsolate())) return WasmDebugInfo::cast(info);
1124 Handle<WasmDebugInfo> new_info = WasmDebugInfo::New(handle(wasm)); 1124 Handle<WasmDebugInfo> new_info = WasmDebugInfo::New(handle(wasm));
1125 wasm->SetInternalField(kWasmDebugInfo, *new_info); 1125 wasm->SetInternalField(kWasmDebugInfo, *new_info);
1126 return *new_info; 1126 return *new_info;
1127 } 1127 }
1128 1128
1129 } // namespace wasm 1129 } // namespace wasm
1130 } // namespace internal 1130 } // namespace internal
1131 } // namespace v8 1131 } // namespace v8
OLDNEW
« no previous file with comments | « src/wasm/wasm-macro-gen.h ('k') | src/wasm/wasm-opcodes.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698