pub struct InstructionExecutor<'a, M: Memory> {
pub mem: &'a mut M,
pub hart_state: &'a mut HartState,
}
Expand description
An InstructionProcessor
that execute instructions, updating hart_state
as appropriate.
Fields§
§mem: &'a mut M
Memory used by load and store instructions
hart_state: &'a mut HartState
Implementations§
Source§impl<'a, M: Memory> InstructionExecutor<'a, M>
impl<'a, M: Memory> InstructionExecutor<'a, M>
Sourcepub fn step(&mut self) -> Result<(), InstructionException>
pub fn step(&mut self) -> Result<(), InstructionException>
Execute instruction pointed to by hart_state.pc
Returns Ok
where instruction execution was successful. Err
with the relevant
InstructionException is returned when the instruction execution causes an exception.
Trait Implementations§
Source§impl<'a, M: Memory> InstructionProcessor for InstructionExecutor<'a, M>
impl<'a, M: Memory> InstructionProcessor for InstructionExecutor<'a, M>
Source§type InstructionResult = Result<bool, InstructionException>
type InstructionResult = Result<bool, InstructionException>
Result is Ok
when instruction execution is successful. `Ok(true) indicates the
instruction updated the PC and Ok(false) indicates it did not (so the PC must be
incremented to execute the next instruction).
fn process_add(&mut self, dec_insn: RType) -> Self::InstructionResult
fn process_addi(&mut self, dec_insn: IType) -> Self::InstructionResult
fn process_sub(&mut self, dec_insn: RType) -> Self::InstructionResult
fn process_slt(&mut self, dec_insn: RType) -> Self::InstructionResult
fn process_slti(&mut self, dec_insn: IType) -> Self::InstructionResult
fn process_sltu(&mut self, dec_insn: RType) -> Self::InstructionResult
fn process_sltui(&mut self, dec_insn: IType) -> Self::InstructionResult
fn process_or(&mut self, dec_insn: RType) -> Self::InstructionResult
fn process_ori(&mut self, dec_insn: IType) -> Self::InstructionResult
fn process_and(&mut self, dec_insn: RType) -> Self::InstructionResult
fn process_andi(&mut self, dec_insn: IType) -> Self::InstructionResult
fn process_xor(&mut self, dec_insn: RType) -> Self::InstructionResult
fn process_xori(&mut self, dec_insn: IType) -> Self::InstructionResult
fn process_sll(&mut self, dec_insn: RType) -> Self::InstructionResult
fn process_slli(&mut self, dec_insn: ITypeShamt) -> Self::InstructionResult
fn process_srl(&mut self, dec_insn: RType) -> Self::InstructionResult
fn process_srli(&mut self, dec_insn: ITypeShamt) -> Self::InstructionResult
fn process_sra(&mut self, dec_insn: RType) -> Self::InstructionResult
fn process_srai(&mut self, dec_insn: ITypeShamt) -> Self::InstructionResult
fn process_lui(&mut self, dec_insn: UType) -> Self::InstructionResult
fn process_auipc(&mut self, dec_insn: UType) -> Self::InstructionResult
fn process_beq(&mut self, dec_insn: BType) -> Self::InstructionResult
fn process_bne(&mut self, dec_insn: BType) -> Self::InstructionResult
fn process_blt(&mut self, dec_insn: BType) -> Self::InstructionResult
fn process_bltu(&mut self, dec_insn: BType) -> Self::InstructionResult
fn process_bge(&mut self, dec_insn: BType) -> Self::InstructionResult
fn process_bgeu(&mut self, dec_insn: BType) -> Self::InstructionResult
fn process_lb(&mut self, dec_insn: IType) -> Self::InstructionResult
fn process_lbu(&mut self, dec_insn: IType) -> Self::InstructionResult
fn process_lh(&mut self, dec_insn: IType) -> Self::InstructionResult
fn process_lhu(&mut self, dec_insn: IType) -> Self::InstructionResult
fn process_lw(&mut self, dec_insn: IType) -> Self::InstructionResult
fn process_sb(&mut self, dec_insn: SType) -> Self::InstructionResult
fn process_sh(&mut self, dec_insn: SType) -> Self::InstructionResult
fn process_sw(&mut self, dec_insn: SType) -> Self::InstructionResult
fn process_jal(&mut self, dec_insn: JType) -> Self::InstructionResult
fn process_jalr(&mut self, dec_insn: IType) -> Self::InstructionResult
fn process_mul(&mut self, dec_insn: RType) -> Self::InstructionResult
fn process_mulh(&mut self, dec_insn: RType) -> Self::InstructionResult
fn process_mulhu(&mut self, dec_insn: RType) -> Self::InstructionResult
fn process_mulhsu(&mut self, dec_insn: RType) -> Self::InstructionResult
fn process_div(&mut self, dec_insn: RType) -> Self::InstructionResult
fn process_divu(&mut self, dec_insn: RType) -> Self::InstructionResult
fn process_rem(&mut self, dec_insn: RType) -> Self::InstructionResult
fn process_remu(&mut self, dec_insn: RType) -> Self::InstructionResult
fn process_fence(&mut self, _dec_insn: IType) -> Self::InstructionResult
Auto Trait Implementations§
impl<'a, M> Freeze for InstructionExecutor<'a, M>
impl<'a, M> RefUnwindSafe for InstructionExecutor<'a, M>where
M: RefUnwindSafe,
impl<'a, M> Send for InstructionExecutor<'a, M>where
M: Send,
impl<'a, M> Sync for InstructionExecutor<'a, M>where
M: Sync,
impl<'a, M> Unpin for InstructionExecutor<'a, M>
impl<'a, M> !UnwindSafe for InstructionExecutor<'a, M>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Convert
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Convert
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.