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 <memory> | 5 #include <memory> |
6 | 6 |
7 #include "src/base/atomic-utils.h" | 7 #include "src/base/atomic-utils.h" |
8 #include "src/code-stubs.h" | 8 #include "src/code-stubs.h" |
9 | 9 |
10 #include "src/macro-assembler.h" | 10 #include "src/macro-assembler.h" |
(...skipping 496 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
507 if (target->IsJSFunction()) { | 507 if (target->IsJSFunction()) { |
508 Handle<JSFunction> func = Handle<JSFunction>::cast(target); | 508 Handle<JSFunction> func = Handle<JSFunction>::cast(target); |
509 export_wrapper_code = handle(func->code()); | 509 export_wrapper_code = handle(func->code()); |
510 if (export_wrapper_code->kind() == Code::JS_TO_WASM_FUNCTION) { | 510 if (export_wrapper_code->kind() == Code::JS_TO_WASM_FUNCTION) { |
511 int exported_param_count = | 511 int exported_param_count = |
512 Smi::cast(func->GetInternalField(kInternalArity))->value(); | 512 Smi::cast(func->GetInternalField(kInternalArity))->value(); |
513 Handle<ByteArray> exportedSig = Handle<ByteArray>( | 513 Handle<ByteArray> exportedSig = Handle<ByteArray>( |
514 ByteArray::cast(func->GetInternalField(kInternalSignature))); | 514 ByteArray::cast(func->GetInternalField(kInternalSignature))); |
515 if (exported_param_count == param_count && | 515 if (exported_param_count == param_count && |
516 exportedSig->length() == sig_data->length() && | 516 exportedSig->length() == sig_data->length() && |
517 memcmp(exportedSig->data(), sig_data->data(), | 517 memcmp(exportedSig->GetDataStartAddress(), |
518 exportedSig->length()) == 0) { | 518 sig_data->GetDataStartAddress(), exportedSig->length()) == 0) { |
519 isMatch = true; | 519 isMatch = true; |
520 } | 520 } |
521 } | 521 } |
522 } | 522 } |
523 if (isMatch) { | 523 if (isMatch) { |
524 int wasm_count = 0; | 524 int wasm_count = 0; |
525 int const mask = RelocInfo::ModeMask(RelocInfo::CODE_TARGET); | 525 int const mask = RelocInfo::ModeMask(RelocInfo::CODE_TARGET); |
526 for (RelocIterator it(*export_wrapper_code, mask); !it.done(); it.next()) { | 526 for (RelocIterator it(*export_wrapper_code, mask); !it.done(); it.next()) { |
527 RelocInfo* rinfo = it.rinfo(); | 527 RelocInfo* rinfo = it.rinfo(); |
528 Address target_address = rinfo->target_address(); | 528 Address target_address = rinfo->target_address(); |
529 Code* target = Code::GetCodeFromTargetAddress(target_address); | 529 Code* target = Code::GetCodeFromTargetAddress(target_address); |
530 if (target->kind() == Code::WASM_FUNCTION) { | 530 if (target->kind() == Code::WASM_FUNCTION) { |
531 ++wasm_count; | 531 ++wasm_count; |
532 code = handle(target); | 532 code = handle(target); |
533 } | 533 } |
534 } | 534 } |
535 DCHECK(wasm_count == 1); | 535 DCHECK(wasm_count == 1); |
536 return code; | 536 return code; |
537 } else { | 537 } else { |
538 // Copy the signature to avoid a raw pointer into a heap object when | 538 // Copy the signature to avoid a raw pointer into a heap object when |
539 // GC can happen. | 539 // GC can happen. |
540 Zone zone(isolate->allocator()); | 540 Zone zone(isolate->allocator()); |
541 MachineRepresentation* reps = | 541 MachineRepresentation* reps = |
542 zone.NewArray<MachineRepresentation>(sig_data_size); | 542 zone.NewArray<MachineRepresentation>(sig_data_size); |
543 memcpy(reps, sig_data->data(), | 543 memcpy(reps, sig_data->GetDataStartAddress(), |
544 sizeof(MachineRepresentation) * sig_data_size); | 544 sizeof(MachineRepresentation) * sig_data_size); |
545 FunctionSig sig(ret_count, param_count, reps); | 545 FunctionSig sig(ret_count, param_count, reps); |
546 | 546 |
547 return compiler::CompileWasmToJSWrapper(isolate, target, &sig, index, | 547 return compiler::CompileWasmToJSWrapper(isolate, target, &sig, index, |
548 module_name, function_name); | 548 module_name, function_name); |
549 } | 549 } |
550 } | 550 } |
551 | 551 |
552 void InitializeParallelCompilation( | 552 void InitializeParallelCompilation( |
553 Isolate* isolate, const std::vector<WasmFunction>& functions, | 553 Isolate* isolate, const std::vector<WasmFunction>& functions, |
(...skipping 1359 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1913 WasmCompiledModule* compiled_module = | 1913 WasmCompiledModule* compiled_module = |
1914 WasmCompiledModule::cast(instance->GetInternalField(kWasmCompiledModule)); | 1914 WasmCompiledModule::cast(instance->GetInternalField(kWasmCompiledModule)); |
1915 CHECK(compiled_module->has_weak_module_object()); | 1915 CHECK(compiled_module->has_weak_module_object()); |
1916 CHECK(compiled_module->ptr_to_weak_module_object()->cleared()); | 1916 CHECK(compiled_module->ptr_to_weak_module_object()->cleared()); |
1917 } | 1917 } |
1918 | 1918 |
1919 } // namespace testing | 1919 } // namespace testing |
1920 } // namespace wasm | 1920 } // namespace wasm |
1921 } // namespace internal | 1921 } // namespace internal |
1922 } // namespace v8 | 1922 } // namespace v8 |
OLD | NEW |