aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMitchell Johnson <ehntoo@ehntoo.org>2022-09-04 19:16:21 -0400
committeriximeow <git@iximeow.net>2022-09-29 15:50:31 -0700
commit4470c5b393817a93854472354d76911cfc9abe6f (patch)
treef45100c3cf1ccaf0baa450ab3a2dc154a6e8cc3a /src
parent189cbcfdad097363e66f41daf4d6a76acbf3661c (diff)
Fix negative unconditional 16-bit thumb branches
Sign extension shift had an off-by-one error so the sign bit was not being properly extended.
Diffstat (limited to 'src')
-rw-r--r--src/armv7/thumb.rs2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/armv7/thumb.rs b/src/armv7/thumb.rs
index baa2352..2e960b1 100644
--- a/src/armv7/thumb.rs
+++ b/src/armv7/thumb.rs
@@ -4174,7 +4174,7 @@ pub fn decode_into<T: Reader<<ARMv7 as Arch>::Address, <ARMv7 as Arch>::Word>>(d
// v4T
inst.opcode = Opcode::B;
let imm = instr2[0..11].load::<u32>();
- let imm = ((imm as i32) << 20) >> 20;
+ let imm = ((imm as i32) << 21) >> 21;
inst.operands = [
Operand::BranchThumbOffset(imm),
Operand::Nothing,