aboutsummaryrefslogtreecommitdiff
path: root/src/armv7/thumb.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/armv7/thumb.rs')
-rw-r--r--src/armv7/thumb.rs14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/armv7/thumb.rs b/src/armv7/thumb.rs
index 0d2a36e..3c480af 100644
--- a/src/armv7/thumb.rs
+++ b/src/armv7/thumb.rs
@@ -1281,13 +1281,14 @@ pub fn decode_into<T: IntoIterator<Item=u8>>(decoder: &InstDecoder, inst: &mut I
} else {
// `ADR` (`A8-320`)
// v6T2
- // TODO: add = TRUE;
- inst.opcode = Opcode::ADR;
+ // encoding T3
+ // handle "add = TRUE" and "add = FALSE" by calling this add/sub
+ inst.opcode = Opcode::ADD;
inst.operands = [
Operand::Reg(Reg::from_u8(rd)),
+ Operand::Reg(Reg::from_u8(15)),
Operand::Imm32(imm as u32),
Operand::Nothing,
- Operand::Nothing,
];
}
}
@@ -1318,13 +1319,14 @@ pub fn decode_into<T: IntoIterator<Item=u8>>(decoder: &InstDecoder, inst: &mut I
} else {
// `ADR` (`A8-320`)
// v6T2
- // TODO: add = FALSE;
- inst.opcode = Opcode::ADR;
+ // encoding T2
+ // handle "add = TRUE" and "add = FALSE" by calling this add/sub
+ inst.opcode = Opcode::SUB;
inst.operands = [
Operand::Reg(Reg::from_u8(rd)),
+ Operand::Reg(Reg::from_u8(15)),
Operand::Imm32(imm as u32),
Operand::Nothing,
- Operand::Nothing,
];
}
}