diff options
Diffstat (limited to 'src/3rdparty/v8/src/mips/assembler-mips.cc')
-rw-r--r-- | src/3rdparty/v8/src/mips/assembler-mips.cc | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/src/3rdparty/v8/src/mips/assembler-mips.cc b/src/3rdparty/v8/src/mips/assembler-mips.cc index f347fdc..4ce924d 100644 --- a/src/3rdparty/v8/src/mips/assembler-mips.cc +++ b/src/3rdparty/v8/src/mips/assembler-mips.cc @@ -273,8 +273,8 @@ static const int kMinimalBufferSize = 4 * KB; Assembler::Assembler(Isolate* arg_isolate, void* buffer, int buffer_size) : AssemblerBase(arg_isolate), - positions_recorder_(this), - emit_debug_code_(FLAG_debug_code) { + recorded_ast_id_(TypeFeedbackId::None()), + positions_recorder_(this) { if (buffer == NULL) { // Do our own buffer management. if (buffer_size <= kMinimalBufferSize) { @@ -579,17 +579,20 @@ bool Assembler::IsNop(Instr instr, unsigned int type) { // See Assembler::nop(type). ASSERT(type < 32); uint32_t opcode = GetOpcodeField(instr); + uint32_t function = GetFunctionField(instr); uint32_t rt = GetRt(instr); - uint32_t rs = GetRs(instr); + uint32_t rd = GetRd(instr); uint32_t sa = GetSa(instr); - // nop(type) == sll(zero_reg, zero_reg, type); - // Technically all these values will be 0 but - // this makes more sense to the reader. + // Traditional mips nop == sll(zero_reg, zero_reg, 0) + // When marking non-zero type, use sll(zero_reg, at, type) + // to avoid use of mips ssnop and ehb special encodings + // of the sll instruction. - bool ret = (opcode == SLL && - rt == static_cast<uint32_t>(ToNumber(zero_reg)) && - rs == static_cast<uint32_t>(ToNumber(zero_reg)) && + Register nop_rt_reg = (type == 0) ? zero_reg : at; + bool ret = (opcode == SPECIAL && function == SLL && + rd == static_cast<uint32_t>(ToNumber(zero_reg)) && + rt == static_cast<uint32_t>(ToNumber(nop_rt_reg)) && sa == type); return ret; @@ -2046,7 +2049,10 @@ void Assembler::RecordRelocInfo(RelocInfo::Mode rmode, intptr_t data) { } ASSERT(buffer_space() >= kMaxRelocSize); // Too late to grow buffer here. if (rmode == RelocInfo::CODE_TARGET_WITH_ID) { - RelocInfo reloc_info_with_ast_id(pc_, rmode, RecordedAstId(), NULL); + RelocInfo reloc_info_with_ast_id(pc_, + rmode, + RecordedAstId().ToInt(), + NULL); ClearRecordedAstId(); reloc_info_writer.Write(&reloc_info_with_ast_id); } else { |