diff options
Diffstat (limited to 'src/arm32/instruction/mod.rs')
-rw-r--r-- | src/arm32/instruction/mod.rs | 52 |
1 files changed, 48 insertions, 4 deletions
diff --git a/src/arm32/instruction/mod.rs b/src/arm32/instruction/mod.rs index 1e1971d..8e527d5 100644 --- a/src/arm32/instruction/mod.rs +++ b/src/arm32/instruction/mod.rs @@ -1,4 +1,4 @@ -// Copyright 2021-2024 Gabriel Bjørnager Jensen. +// Copyright 2024 Gabriel Bjørnager Jensen. // // This file is part of Pollex. // @@ -23,12 +23,56 @@ mod test; mod display; +mod encode_arm; -use crate::arm32::Condition; +use crate::arm32::{ + Predicate, + Flag, + Register, + Shifter, + Signed, + Unsigned, +}; /// An Arm32 instruction. +#[derive(Clone, Debug, Eq, PartialEq)] pub enum Instruction { - Branch { condition: Condition, immediate: i32 }, + Add { + predicate: Predicate, + destination: Register, + base: Register, + source: Shifter, + s: Flag<'S'> }, - BranchLink { condition: Condition, immediate: i32 }, + Branch { + predicate: Predicate, + immediate: Signed }, + + BranchExchange { + predicate: Predicate, + register: Register }, + + BranchLink { + predicate: Predicate, + immediate: Signed + }, + + Breakpoint { + immediate: Unsigned }, + + Move { + predicate: Predicate, + destination: Register, + source: Shifter, + s: Flag<'S'> }, + + MoveNegated { + predicate: Predicate, + destination: Register, + source: Shifter, + s: Flag<'S'> }, + + SoftwareInterrupt { + predicate: Predicate, + immediate: Unsigned }, } |