Revert "Upgrade to 5.0.71.48"
This reverts commit 8389745919cae02139ddc085a63c00d024269cf2.
Change-Id: Ic5c75c8b3ddaf795972372fbc863a514862953c1
diff --git a/src/compiler/mips/code-generator-mips.cc b/src/compiler/mips/code-generator-mips.cc
index cdd7e34..75e4b9e 100644
--- a/src/compiler/mips/code-generator-mips.cc
+++ b/src/compiler/mips/code-generator-mips.cc
@@ -227,25 +227,19 @@
if (mode_ > RecordWriteMode::kValueIsPointer) {
__ JumpIfSmi(value_, exit());
}
- __ CheckPageFlag(value_, scratch0_,
- MemoryChunk::kPointersToHereAreInterestingMask, eq,
- exit());
- RememberedSetAction const remembered_set_action =
- mode_ > RecordWriteMode::kValueIsMap ? EMIT_REMEMBERED_SET
- : OMIT_REMEMBERED_SET;
+ if (mode_ > RecordWriteMode::kValueIsMap) {
+ __ CheckPageFlag(value_, scratch0_,
+ MemoryChunk::kPointersToHereAreInterestingMask, eq,
+ exit());
+ }
SaveFPRegsMode const save_fp_mode =
frame()->DidAllocateDoubleRegisters() ? kSaveFPRegs : kDontSaveFPRegs;
- if (!frame()->needs_frame()) {
- // We need to save and restore ra if the frame was elided.
- __ Push(ra);
- }
+ // TODO(turbofan): Once we get frame elision working, we need to save
+ // and restore lr properly here if the frame was elided.
RecordWriteStub stub(isolate(), object_, scratch0_, scratch1_,
- remembered_set_action, save_fp_mode);
+ EMIT_REMEMBERED_SET, save_fp_mode);
__ Addu(scratch1_, object_, index_);
__ CallStub(&stub);
- if (!frame()->needs_frame()) {
- __ Pop(ra);
- }
}
private:
@@ -552,6 +546,11 @@
frame_access_state()->ClearSPDelta();
break;
}
+ case kArchLazyBailout: {
+ EnsureSpaceForLazyDeopt();
+ RecordCallPosition(instr);
+ break;
+ }
case kArchPrepareCallCFunction: {
int const num_parameters = MiscField::decode(instr->opcode());
__ PrepareCallCFunction(num_parameters, kScratchReg);
@@ -605,13 +604,6 @@
case kArchFramePointer:
__ mov(i.OutputRegister(), fp);
break;
- case kArchParentFramePointer:
- if (frame_access_state()->frame()->needs_frame()) {
- __ lw(i.OutputRegister(), MemOperand(fp, 0));
- } else {
- __ mov(i.OutputRegister(), fp);
- }
- break;
case kArchTruncateDoubleToI:
__ TruncateDoubleToI(i.OutputRegister(), i.InputDoubleRegister(0));
break;
@@ -633,13 +625,6 @@
__ bind(ool->exit());
break;
}
- case kArchStackSlot: {
- FrameOffset offset =
- frame_access_state()->GetFrameOffset(i.InputInt32(0));
- __ Addu(i.OutputRegister(), offset.from_stack_pointer() ? sp : fp,
- Operand(offset.offset()));
- break;
- }
case kMipsAdd:
__ Addu(i.OutputRegister(), i.InputRegister(0), i.InputOperand(1));
break;
@@ -703,70 +688,6 @@
case kMipsClz:
__ Clz(i.OutputRegister(), i.InputRegister(0));
break;
- case kMipsCtz: {
- Register reg1 = kScratchReg;
- Register reg2 = kScratchReg2;
- Label skip_for_zero;
- Label end;
- // Branch if the operand is zero
- __ Branch(&skip_for_zero, eq, i.InputRegister(0), Operand(zero_reg));
- // Find the number of bits before the last bit set to 1.
- __ Subu(reg2, zero_reg, i.InputRegister(0));
- __ And(reg2, reg2, i.InputRegister(0));
- __ clz(reg2, reg2);
- // Get the number of bits after the last bit set to 1.
- __ li(reg1, 0x1F);
- __ Subu(i.OutputRegister(), reg1, reg2);
- __ Branch(&end);
- __ bind(&skip_for_zero);
- // If the operand is zero, return word length as the result.
- __ li(i.OutputRegister(), 0x20);
- __ bind(&end);
- } break;
- case kMipsPopcnt: {
- Register reg1 = kScratchReg;
- Register reg2 = kScratchReg2;
- uint32_t m1 = 0x55555555;
- uint32_t m2 = 0x33333333;
- uint32_t m4 = 0x0f0f0f0f;
- uint32_t m8 = 0x00ff00ff;
- uint32_t m16 = 0x0000ffff;
-
- // Put count of ones in every 2 bits into those 2 bits.
- __ li(at, m1);
- __ srl(reg1, i.InputRegister(0), 1);
- __ And(reg2, i.InputRegister(0), at);
- __ And(reg1, reg1, at);
- __ addu(reg1, reg1, reg2);
-
- // Put count of ones in every 4 bits into those 4 bits.
- __ li(at, m2);
- __ srl(reg2, reg1, 2);
- __ And(reg2, reg2, at);
- __ And(reg1, reg1, at);
- __ addu(reg1, reg1, reg2);
-
- // Put count of ones in every 8 bits into those 8 bits.
- __ li(at, m4);
- __ srl(reg2, reg1, 4);
- __ And(reg2, reg2, at);
- __ And(reg1, reg1, at);
- __ addu(reg1, reg1, reg2);
-
- // Put count of ones in every 16 bits into those 16 bits.
- __ li(at, m8);
- __ srl(reg2, reg1, 8);
- __ And(reg2, reg2, at);
- __ And(reg1, reg1, at);
- __ addu(reg1, reg1, reg2);
-
- // Calculate total number of ones.
- __ li(at, m16);
- __ srl(reg2, reg1, 16);
- __ And(reg2, reg2, at);
- __ And(reg1, reg1, at);
- __ addu(i.OutputRegister(), reg1, reg2);
- } break;
case kMipsShl:
if (instr->InputAt(1)->IsRegister()) {
__ sllv(i.OutputRegister(), i.InputRegister(0), i.InputRegister(1));
@@ -1029,12 +950,6 @@
__ cvt_s_w(i.OutputDoubleRegister(), scratch);
break;
}
- case kMipsCvtSUw: {
- FPURegister scratch = kScratchDoubleReg;
- __ Cvt_d_uw(i.OutputDoubleRegister(), i.InputRegister(0), scratch);
- __ cvt_s_d(i.OutputDoubleRegister(), i.OutputDoubleRegister());
- break;
- }
case kMipsCvtDUw: {
FPURegister scratch = kScratchDoubleReg;
__ Cvt_d_uw(i.OutputDoubleRegister(), i.InputRegister(0), scratch);
@@ -1095,12 +1010,6 @@
__ Trunc_uw_d(i.InputDoubleRegister(0), i.OutputRegister(), scratch);
break;
}
- case kMipsTruncUwS: {
- FPURegister scratch = kScratchDoubleReg;
- // TODO(plind): Fix wrong param order of Trunc_uw_s() macro-asm function.
- __ Trunc_uw_s(i.InputDoubleRegister(0), i.OutputRegister(), scratch);
- break;
- }
case kMipsFloat64ExtractLowWord32:
__ FmoveLow(i.OutputRegister(), i.InputDoubleRegister(0));
break;
@@ -1507,10 +1416,19 @@
MipsOperandConverter i(this, instr);
Register input = i.InputRegister(0);
size_t const case_count = instr->InputCount() - 2;
+ Label here;
__ Branch(GetLabel(i.InputRpo(1)), hs, input, Operand(case_count));
- __ GenerateSwitchTable(input, case_count, [&i, this](size_t index) {
- return GetLabel(i.InputRpo(index + 2));
- });
+ __ BlockTrampolinePoolFor(case_count + 6);
+ __ bal(&here);
+ __ sll(at, input, 2); // Branch delay slot.
+ __ bind(&here);
+ __ addu(at, at, ra);
+ __ lw(at, MemOperand(at, 4 * v8::internal::Assembler::kInstrSize));
+ __ jr(at);
+ __ nop(); // Branch delay slot nop.
+ for (size_t index = 0; index < case_count; ++index) {
+ __ dd(GetLabel(i.InputRpo(index + 2)));
+ }
}
@@ -1547,6 +1465,8 @@
// remaining stack slots.
if (FLAG_code_comments) __ RecordComment("-- OSR entrypoint --");
osr_pc_offset_ = __ pc_offset();
+ // TODO(titzer): cannot address target function == local #-1
+ __ lw(a1, MemOperand(fp, JavaScriptFrameConstants::kFunctionOffset));
stack_shrink_slots -= OsrHelper(info()).UnoptimizedFrameSlots();
}