summaryrefslogtreecommitdiff
path: root/deps/v8/src/mips64/deoptimizer-mips64.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/mips64/deoptimizer-mips64.cc')
-rw-r--r--deps/v8/src/mips64/deoptimizer-mips64.cc42
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++) {