Adapted disassembler for J and JAL instructions.
TEST=cctest/test-disasm-mips/Type0,
cctest/test-disasm-mips64/Type3
BUG=
Review URL: https://codereview.chromium.org/
1258743004
Cr-Commit-Position: refs/heads/master@{#29921}
// Print 26-bit hex immediate value.
void Decoder::PrintXImm26(Instruction* instr) {
- uint32_t imm = instr->Imm26Value() << kImmFieldShift;
- out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, "0x%x", imm);
+ uint32_t target = static_cast<uint32_t>(instr->Imm26Value())
+ << kImmFieldShift;
+ target = (reinterpret_cast<uint32_t>(instr) & ~0xfffffff) | target;
+ out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, "0x%x", target);
}
// Print 26-bit hex immediate value.
void Decoder::PrintXImm26(Instruction* instr) {
- uint32_t imm = static_cast<uint32_t>(instr->Imm26Value()) << kImmFieldShift;
- out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, "0x%x", imm);
+ uint64_t target = static_cast<uint64_t>(instr->Imm26Value())
+ << kImmFieldShift;
+ target = (reinterpret_cast<uint64_t>(instr) & ~0xfffffff) | target;
+ out_buffer_pos_ += SNPrintF(out_buffer_ + out_buffer_pos_, "0x%lx", target);
}