diff options
Diffstat (limited to 'deps/v8/src/assembler.cc')
-rw-r--r-- | deps/v8/src/assembler.cc | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/deps/v8/src/assembler.cc b/deps/v8/src/assembler.cc index 0f216052f3..2037a0ec8f 100644 --- a/deps/v8/src/assembler.cc +++ b/deps/v8/src/assembler.cc @@ -44,10 +44,24 @@ #include "src/simulator.h" // For flushing instruction cache. #include "src/snapshot/serializer-common.h" #include "src/snapshot/snapshot.h" +#include "src/string-constants.h" namespace v8 { namespace internal { +AssemblerOptions AssemblerOptions::EnableV8AgnosticCode() const { + AssemblerOptions options = *this; + options.v8_agnostic_code = true; + options.record_reloc_info_for_serialization = false; + options.enable_root_array_delta_access = false; + // Inherit |enable_simulator_code| value. + options.isolate_independent_code = false; + options.inline_offheap_trampolines = false; + // Inherit |code_range_start| value. + // Inherit |use_pc_relative_calls_and_jumps| value. + return options; +} + AssemblerOptions AssemblerOptions::Default( Isolate* isolate, bool explicitly_support_serialization) { AssemblerOptions options; @@ -61,9 +75,12 @@ AssemblerOptions AssemblerOptions::Default( options.enable_simulator_code = !serializer; #endif options.inline_offheap_trampolines = !serializer; + #if V8_TARGET_ARCH_X64 || V8_TARGET_ARCH_ARM64 - options.code_range_start = - isolate->heap()->memory_allocator()->code_range()->start(); + const base::AddressRegion& code_range = + isolate->heap()->memory_allocator()->code_range(); + DCHECK_IMPLIES(code_range.begin() != kNullAddress, !code_range.is_empty()); + options.code_range_start = code_range.begin(); #endif return options; } @@ -355,6 +372,13 @@ HeapObjectRequest::HeapObjectRequest(CodeStub* code_stub, int offset) DCHECK_NOT_NULL(value_.code_stub); } +HeapObjectRequest::HeapObjectRequest(const StringConstantBase* string, + int offset) + : kind_(kStringConstant), offset_(offset) { + value_.string = string; + DCHECK_NOT_NULL(value_.string); +} + // Platform specific but identical code for all the platforms. void Assembler::RecordDeoptReason(DeoptimizeReason reason, @@ -381,11 +405,13 @@ void Assembler::DataAlign(int m) { } void AssemblerBase::RequestHeapObject(HeapObjectRequest request) { + DCHECK(!options().v8_agnostic_code); request.set_offset(pc_offset()); heap_object_requests_.push_front(request); } int AssemblerBase::AddCodeTarget(Handle<Code> target) { + DCHECK(!options().v8_agnostic_code); int current = static_cast<int>(code_targets_.size()); if (current > 0 && !target.is_null() && code_targets_.back().address() == target.address()) { @@ -398,6 +424,7 @@ int AssemblerBase::AddCodeTarget(Handle<Code> target) { } Handle<Code> AssemblerBase::GetCodeTarget(intptr_t code_target_index) const { + DCHECK(!options().v8_agnostic_code); DCHECK_LE(0, code_target_index); DCHECK_LT(code_target_index, code_targets_.size()); return code_targets_[code_target_index]; @@ -405,6 +432,7 @@ Handle<Code> AssemblerBase::GetCodeTarget(intptr_t code_target_index) const { void AssemblerBase::UpdateCodeTarget(intptr_t code_target_index, Handle<Code> code) { + DCHECK(!options().v8_agnostic_code); DCHECK_LE(0, code_target_index); DCHECK_LT(code_target_index, code_targets_.size()); code_targets_[code_target_index] = code; |