| 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/compiler/wasm-compiler.h" | 5 #include "src/compiler/wasm-compiler.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "src/isolate-inl.h" | 9 #include "src/isolate-inl.h" |
| 10 | 10 |
| (...skipping 3412 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3423 } | 3423 } |
| 3424 | 3424 |
| 3425 // Run the compiler pipeline to generate machine code. | 3425 // Run the compiler pipeline to generate machine code. |
| 3426 CallDescriptor* descriptor = wasm::ModuleEnv::GetWasmCallDescriptor( | 3426 CallDescriptor* descriptor = wasm::ModuleEnv::GetWasmCallDescriptor( |
| 3427 &compilation_zone_, function_->sig); | 3427 &compilation_zone_, function_->sig); |
| 3428 if (jsgraph_->machine()->Is32()) { | 3428 if (jsgraph_->machine()->Is32()) { |
| 3429 descriptor = | 3429 descriptor = |
| 3430 module_env_->GetI32WasmCallDescriptor(&compilation_zone_, descriptor); | 3430 module_env_->GetI32WasmCallDescriptor(&compilation_zone_, descriptor); |
| 3431 } | 3431 } |
| 3432 job_.reset(Pipeline::NewWasmCompilationJob(&info_, jsgraph_->graph(), | 3432 job_.reset(Pipeline::NewWasmCompilationJob(&info_, jsgraph_->graph(), |
| 3433 descriptor, source_positions)); | 3433 descriptor, source_positions, |
| 3434 &protected_instructions_)); |
| 3434 ok_ = job_->ExecuteJob() == CompilationJob::SUCCEEDED; | 3435 ok_ = job_->ExecuteJob() == CompilationJob::SUCCEEDED; |
| 3435 // TODO(bradnelson): Improve histogram handling of size_t. | 3436 // TODO(bradnelson): Improve histogram handling of size_t. |
| 3436 // TODO(ahaas): The counters are not thread-safe at the moment. | 3437 // TODO(ahaas): The counters are not thread-safe at the moment. |
| 3437 // isolate_->counters()->wasm_compile_function_peak_memory_bytes() | 3438 // isolate_->counters()->wasm_compile_function_peak_memory_bytes() |
| 3438 // ->AddSample( | 3439 // ->AddSample( |
| 3439 // static_cast<int>(jsgraph->graph()->zone()->allocation_size())); | 3440 // static_cast<int>(jsgraph->graph()->zone()->allocation_size())); |
| 3440 | 3441 |
| 3441 if (FLAG_trace_wasm_decode_time) { | 3442 if (FLAG_trace_wasm_decode_time) { |
| 3442 double pipeline_ms = pipeline_timer.Elapsed().InMillisecondsF(); | 3443 double pipeline_ms = pipeline_timer.Elapsed().InMillisecondsF(); |
| 3443 PrintF( | 3444 PrintF( |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3483 } | 3484 } |
| 3484 | 3485 |
| 3485 if (FLAG_trace_wasm_decode_time) { | 3486 if (FLAG_trace_wasm_decode_time) { |
| 3486 double compile_ms = compile_timer.Elapsed().InMillisecondsF(); | 3487 double compile_ms = compile_timer.Elapsed().InMillisecondsF(); |
| 3487 PrintF("wasm-code-generation ok: %d bytes, %0.3f ms code generation\n", | 3488 PrintF("wasm-code-generation ok: %d bytes, %0.3f ms code generation\n", |
| 3488 static_cast<int>(function_->code_end_offset - | 3489 static_cast<int>(function_->code_end_offset - |
| 3489 function_->code_start_offset), | 3490 function_->code_start_offset), |
| 3490 compile_ms); | 3491 compile_ms); |
| 3491 } | 3492 } |
| 3492 | 3493 |
| 3494 Handle<FixedArray> protected_instructions = PackProtectedInstructions(); |
| 3495 code->set_protected_instructions(*protected_instructions); |
| 3496 |
| 3493 return code; | 3497 return code; |
| 3494 } | 3498 } |
| 3495 | 3499 |
| 3500 Handle<FixedArray> WasmCompilationUnit::PackProtectedInstructions() const { |
| 3501 const int num_instructions = static_cast<int>(protected_instructions_.size()); |
| 3502 Handle<FixedArray> fn_protected = isolate_->factory()->NewFixedArray( |
| 3503 num_instructions * wasm::kTrapDataSize, TENURED); |
| 3504 for (unsigned i = 0; i < protected_instructions_.size(); ++i) { |
| 3505 const ProtectedInstructionData& instruction = protected_instructions_[i]; |
| 3506 fn_protected->set(wasm::kTrapDataSize * i + wasm::kTrapCodeOffset, |
| 3507 Smi::FromInt(instruction.instr_offset)); |
| 3508 fn_protected->set(wasm::kTrapDataSize * i + wasm::kTrapLandingOffset, |
| 3509 Smi::FromInt(instruction.landing_offset)); |
| 3510 } |
| 3511 return fn_protected; |
| 3512 } |
| 3513 |
| 3496 } // namespace compiler | 3514 } // namespace compiler |
| 3497 } // namespace internal | 3515 } // namespace internal |
| 3498 } // namespace v8 | 3516 } // namespace v8 |
| OLD | NEW |