aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoriximeow <me@iximeow.net>2019-03-10 17:25:12 -0700
committeriximeow <me@iximeow.net>2020-01-12 17:28:07 -0800
commite4eff1a3edec523a5ac0c2716573f9ad1ca432ad (patch)
tree936d6983ce1740a1edc29cebd37c9ee0cf1b844e
parentf62de4c3eff32c4f3709d5d690671771fd453701 (diff)
update a bunch of arm stuff
-rw-r--r--src/armv7.rs14
-rw-r--r--src/lib.rs45
2 files changed, 8 insertions, 51 deletions
diff --git a/src/armv7.rs b/src/armv7.rs
index d65c8ae..222c8a6 100644
--- a/src/armv7.rs
+++ b/src/armv7.rs
@@ -552,21 +552,21 @@ impl ConditionCode {
}
impl Decodable for Instruction {
- fn decode<'a, T: IntoIterator<Item=&'a u8>>(bytes: T) -> Option<Self> {
+ fn decode<T: IntoIterator<Item=u8>>(bytes: T) -> Option<Self> {
let mut blank = Instruction::blank();
match blank.decode_into(bytes) {
Some(_) => Some(blank),
None => None
}
}
- fn decode_into<'a, T: IntoIterator<Item=&'a u8>>(&mut self, bytes: T) -> Option<()> {
- fn read_word<'a, T: IntoIterator<Item=&'a u8>>(bytes: T) -> Option<u32> {
+ fn decode_into<T: IntoIterator<Item=u8>>(&mut self, bytes: T) -> Option<()> {
+ fn read_word<T: IntoIterator<Item=u8>>(bytes: T) -> Option<u32> {
let mut iter = bytes.into_iter();
let instr: u32 =
- ((*iter.next()? as u32) ) |
- ((*iter.next()? as u32) << 8 ) |
- ((*iter.next()? as u32) << 16) |
- ((*iter.next()? as u32) << 24);
+ ((iter.next()? as u32) ) |
+ ((iter.next()? as u32) << 8 ) |
+ ((iter.next()? as u32) << 16) |
+ ((iter.next()? as u32) << 24);
Some(instr)
}
diff --git a/src/lib.rs b/src/lib.rs
index 1ef6f13..88c01b0 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,46 +1,3 @@
extern crate yaxpeax_arch;
-use yaxpeax_arch::{Arch, Decodable, LengthedInstruction};
-
-#[derive(Debug)]
-pub enum Opcode {
- NOP
-}
-
-#[derive(Debug)]
-pub struct Instruction {
- pub opcode: Opcode
-}
-
-impl LengthedInstruction for Instruction {
- type Unit = <PIC24 as Arch>::Address;
- fn len(&self) -> Self::Unit {
- 3 // ish
- }
-}
-
-impl Decodable for Instruction {
- fn decode<'a, T: IntoIterator<Item=&'a u8>>(bytes: T) -> Option<Self> {
- let mut blank = Instruction { opcode: Opcode::NOP };
- match blank.decode_into(bytes) {
- Some(_) => Some(blank),
- None => None
- }
- }
- fn decode_into<'a, T: IntoIterator<Item=&'a u8>>(&mut self, bytes: T) -> Option<()> {
- match bytes.into_iter().next() {
- Some(0x00) => {
- self.opcode = Opcode::NOP;
- Some(())
- },
- _ => None
- }
- }
-}
-
-pub struct PIC24;
-impl Arch for PIC24 {
- type Address = u32;
- type Instruction = Instruction;
- type Operand = ();
-}
+pub mod armv7;