diff options
author | Elliott Hughes <enh@google.com> | 2012-04-11 11:23:23 -0700 |
---|---|---|
committer | Elliott Hughes <enh@google.com> | 2012-04-11 11:23:23 -0700 |
commit | d86261ed72e4fb294f602e1831306612291b0f24 (patch) | |
tree | 822900e7da746a64747e0d829ee938eccc516814 /src | |
parent | 61a9c617f9690b0132580efa2062de88845450dd (diff) | |
download | art-d86261ed72e4fb294f602e1831306612291b0f24.zip art-d86261ed72e4fb294f602e1831306612291b0f24.tar.gz art-d86261ed72e4fb294f602e1831306612291b0f24.tar.bz2 |
Sign-extend ARM B targets.
Examples:
0x60cdd7c4: 1a00000b bne 44 (0x60cdd7f8)
0x60cdd804: eaffffef b -68 (0x60cdd7c8)
Change-Id: Id8c895dcd6153654975e652fa28638a15e00b538
Diffstat (limited to 'src')
-rw-r--r-- | src/disassembler_arm.cc | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/disassembler_arm.cc b/src/disassembler_arm.cc index 2baf02c..4726c63 100644 --- a/src/disassembler_arm.cc +++ b/src/disassembler_arm.cc @@ -251,7 +251,8 @@ void DisassemblerArm::DumpArm(std::ostream& os, const uint8_t* instr_ptr) { { bool bl = (instruction & (1 << 24)) != 0; opcode = (bl ? "bl" : "b"); - uint32_t imm32 = (instruction & 0xffffff) << 2; + int32_t imm26 = (instruction & 0xffffff) << 2; + int32_t imm32 = (imm26 << 6) >> 6; // Sign extend. DumpBranchTarget(args, instr_ptr + 8, imm32); } break; |