diff options
Diffstat (limited to 'deps/v8/src/mips64/assembler-mips64.cc')
-rw-r--r-- | deps/v8/src/mips64/assembler-mips64.cc | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/deps/v8/src/mips64/assembler-mips64.cc b/deps/v8/src/mips64/assembler-mips64.cc index f0d3eba6b6..5a8dd2cd37 100644 --- a/deps/v8/src/mips64/assembler-mips64.cc +++ b/deps/v8/src/mips64/assembler-mips64.cc @@ -1372,17 +1372,21 @@ void Assembler::bne(Register rs, Register rt, int16_t offset) { void Assembler::bovc(Register rs, Register rt, int16_t offset) { DCHECK(kArchVariant == kMips64r6); - DCHECK(!(rs.is(zero_reg))); - DCHECK(rs.code() >= rt.code()); - GenInstrImmediate(ADDI, rs, rt, offset, CompactBranchType::COMPACT_BRANCH); + if (rs.code() >= rt.code()) { + GenInstrImmediate(ADDI, rs, rt, offset, CompactBranchType::COMPACT_BRANCH); + } else { + GenInstrImmediate(ADDI, rt, rs, offset, CompactBranchType::COMPACT_BRANCH); + } } void Assembler::bnvc(Register rs, Register rt, int16_t offset) { DCHECK(kArchVariant == kMips64r6); - DCHECK(!(rs.is(zero_reg))); - DCHECK(rs.code() >= rt.code()); - GenInstrImmediate(DADDI, rs, rt, offset, CompactBranchType::COMPACT_BRANCH); + if (rs.code() >= rt.code()) { + GenInstrImmediate(DADDI, rs, rt, offset, CompactBranchType::COMPACT_BRANCH); + } else { + GenInstrImmediate(DADDI, rt, rs, offset, CompactBranchType::COMPACT_BRANCH); + } } @@ -1863,6 +1867,12 @@ void Assembler::drotr(Register rd, Register rt, uint16_t sa) { emit(instr); } +void Assembler::drotr32(Register rd, Register rt, uint16_t sa) { + DCHECK(rd.is_valid() && rt.is_valid() && is_uint5(sa)); + Instr instr = SPECIAL | (1 << kRsShift) | (rt.code() << kRtShift) | + (rd.code() << kRdShift) | (sa << kSaShift) | DSRL32; + emit(instr); +} void Assembler::drotrv(Register rd, Register rt, Register rs) { DCHECK(rd.is_valid() && rt.is_valid() && rs.is_valid() ); @@ -1899,20 +1909,20 @@ void Assembler::dsra32(Register rd, Register rt, uint16_t sa) { void Assembler::lsa(Register rd, Register rt, Register rs, uint8_t sa) { DCHECK(rd.is_valid() && rt.is_valid() && rs.is_valid()); - DCHECK(sa < 5 && sa > 0); + DCHECK(sa <= 3); DCHECK(kArchVariant == kMips64r6); - Instr instr = SPECIAL | (rs.code() << kRsShift) | (rt.code() << kRtShift) | - (rd.code() << kRdShift) | (sa - 1) << kSaShift | LSA; + Instr instr = SPECIAL | rs.code() << kRsShift | rt.code() << kRtShift | + rd.code() << kRdShift | sa << kSaShift | LSA; emit(instr); } void Assembler::dlsa(Register rd, Register rt, Register rs, uint8_t sa) { DCHECK(rd.is_valid() && rt.is_valid() && rs.is_valid()); - DCHECK(sa < 5 && sa > 0); + DCHECK(sa <= 3); DCHECK(kArchVariant == kMips64r6); - Instr instr = SPECIAL | (rs.code() << kRsShift) | (rt.code() << kRtShift) | - (rd.code() << kRdShift) | (sa - 1) << kSaShift | DLSA; + Instr instr = SPECIAL | rs.code() << kRsShift | rt.code() << kRtShift | + rd.code() << kRdShift | sa << kSaShift | DLSA; emit(instr); } @@ -2493,7 +2503,6 @@ void Assembler::lwc1(FPURegister fd, const MemOperand& src) { void Assembler::ldc1(FPURegister fd, const MemOperand& src) { - DCHECK(!src.rm().is(at)); if (is_int16(src.offset_)) { GenInstrImmediate(LDC1, src.rm(), fd, src.offset_); } else { // Offset > 16 bits, use multiple instructions to load. @@ -3210,7 +3219,7 @@ void Assembler::RecordRelocInfo(RelocInfo::Mode rmode, intptr_t data) { // We do not try to reuse pool constants. RelocInfo rinfo(isolate(), pc_, rmode, data, NULL); if (rmode >= RelocInfo::COMMENT && - rmode <= RelocInfo::DEBUG_BREAK_SLOT_AT_CALL) { + rmode <= RelocInfo::DEBUG_BREAK_SLOT_AT_TAIL_CALL) { // Adjust code for new modes. DCHECK(RelocInfo::IsDebugBreakSlot(rmode) || RelocInfo::IsComment(rmode) |