diff options
Diffstat (limited to 'deps/v8/src/mips64/deoptimizer-mips64.cc')
-rw-r--r-- | deps/v8/src/mips64/deoptimizer-mips64.cc | 42 |
1 files changed, 20 insertions, 22 deletions
diff --git a/deps/v8/src/mips64/deoptimizer-mips64.cc b/deps/v8/src/mips64/deoptimizer-mips64.cc index 804a176bce..4885b5f050 100644 --- a/deps/v8/src/mips64/deoptimizer-mips64.cc +++ b/deps/v8/src/mips64/deoptimizer-mips64.cc @@ -77,24 +77,6 @@ void Deoptimizer::PatchCodeForDeoptimization(Isolate* isolate, Code* code) { } -void Deoptimizer::SetPlatformCompiledStubRegisters( - FrameDescription* output_frame, CodeStubDescriptor* descriptor) { - ApiFunction function(descriptor->deoptimization_handler()); - ExternalReference xref(&function, ExternalReference::BUILTIN_CALL, isolate_); - intptr_t handler = reinterpret_cast<intptr_t>(xref.address()); - int params = descriptor->GetHandlerParameterCount(); - output_frame->SetRegister(a0.code(), params); - output_frame->SetRegister(a1.code(), handler); -} - - -void Deoptimizer::CopyDoubleRegisters(FrameDescription* output_frame) { - for (int i = 0; i < DoubleRegister::kMaxNumRegisters; ++i) { - Float64 double_value = input_->GetDoubleRegister(i); - output_frame->SetDoubleRegister(i, double_value); - } -} - #define __ masm()-> @@ -141,7 +123,8 @@ void Deoptimizer::TableEntryGenerator::Generate() { } } - __ li(a2, Operand(ExternalReference(Isolate::kCEntryFPAddress, isolate()))); + __ li(a2, Operand(ExternalReference(IsolateAddressId::kCEntryFPAddress, + isolate()))); __ Sd(fp, MemOperand(a2)); const int kSavedRegistersAreaSize = @@ -323,7 +306,11 @@ void Deoptimizer::TableEntryGenerator::Generate() { // Maximum size of a table entry generated below. +#ifdef _MIPS_ARCH_MIPS64R6 +const int Deoptimizer::table_entry_size_ = 2 * Assembler::kInstrSize; +#else const int Deoptimizer::table_entry_size_ = 3 * Assembler::kInstrSize; +#endif void Deoptimizer::TableEntryGenerator::GeneratePrologue() { Assembler::BlockTrampolinePoolScope block_trampoline_pool(masm()); @@ -332,8 +319,13 @@ void Deoptimizer::TableEntryGenerator::GeneratePrologue() { // Note that registers are still live when jumping to an entry. Label table_start, done, trampoline_jump; __ bind(&table_start); +#ifdef _MIPS_ARCH_MIPS64R6 + int kMaxEntriesBranchReach = + (1 << (kImm26Bits - 2)) / (table_entry_size_ / Assembler::kInstrSize); +#else int kMaxEntriesBranchReach = (1 << (kImm16Bits - 2)) / (table_entry_size_ / Assembler::kInstrSize); +#endif if (count() <= kMaxEntriesBranchReach) { // Common case. @@ -341,9 +333,14 @@ void Deoptimizer::TableEntryGenerator::GeneratePrologue() { Label start; __ bind(&start); DCHECK(is_int16(i)); - __ BranchShort(USE_DELAY_SLOT, &done); // Expose delay slot. - __ li(at, i); // In the delay slot. - __ nop(); + if (kArchVariant == kMips64r6) { + __ li(at, i); + __ BranchShort(PROTECT, &done); + } else { + __ BranchShort(USE_DELAY_SLOT, &done); // Expose delay slot. + __ li(at, i); // In the delay slot. + __ nop(); + } DCHECK_EQ(table_entry_size_, masm()->SizeOfCodeGeneratedSince(&start)); } @@ -353,6 +350,7 @@ void Deoptimizer::TableEntryGenerator::GeneratePrologue() { __ bind(&done); __ Push(at); } else { + DCHECK(kArchVariant != kMips64r6); // Uncommon case, the branch cannot reach. // Create mini trampoline to reach the end of the table for (int i = 0, j = 0; i < count(); i++, j++) { |