Skip to main content

SystemInstructionHandler

Trait SystemInstructionHandler 

Source
pub trait SystemInstructionHandler<Reg, Regs, Memory, PC>
where Reg: Register,
{ // Required method fn handle_ecall( &mut self, regs: &mut Regs, memory: &mut Memory, program_counter: &mut PC, ) -> Result<ControlFlow<()>, ExecutionError<Reg::Type>>; // Provided methods fn handle_fence(&mut self, pred: u8, succ: u8) { ... } fn handle_fence_tso(&mut self) { ... } fn handle_ebreak( &mut self, regs: &mut Regs, memory: &mut Memory, program_counter: &mut PC, instruction_size: u8, ) -> Result<ControlFlow<()>, ExecutionError<Reg::Type>> { ... } }
Expand description

Custom handler for system instructions ecall and ebreak

Required Methods§

Source

fn handle_ecall( &mut self, regs: &mut Regs, memory: &mut Memory, program_counter: &mut PC, ) -> Result<ControlFlow<()>, ExecutionError<Reg::Type>>

Handle an ecall instruction

Provided Methods§

Source

fn handle_fence(&mut self, pred: u8, succ: u8)

Handle a fence instruction

Source

fn handle_fence_tso(&mut self)

Handle a fence.tso instruction

Source

fn handle_ebreak( &mut self, regs: &mut Regs, memory: &mut Memory, program_counter: &mut PC, instruction_size: u8, ) -> Result<ControlFlow<()>, ExecutionError<Reg::Type>>

Handle an ebreak (or compressed c.ebreak) instruction

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementations on Foreign Types§

Source§

impl<Reg, Regs, Memory, PC, T> SystemInstructionHandler<Reg, Regs, Memory, PC> for &mut T
where Reg: Register, T: SystemInstructionHandler<Reg, Regs, Memory, PC>,

Source§

fn handle_fence(&mut self, pred: u8, succ: u8)

Source§

fn handle_fence_tso(&mut self)

Source§

fn handle_ecall( &mut self, regs: &mut Regs, memory: &mut Memory, program_counter: &mut PC, ) -> Result<ControlFlow<()>, ExecutionError<Reg::Type>>

Source§

fn handle_ebreak( &mut self, regs: &mut Regs, memory: &mut Memory, program_counter: &mut PC, instruction_size: u8, ) -> Result<ControlFlow<()>, ExecutionError<Reg::Type>>

Implementors§

Source§

impl<Reg, Regs, Memory, PC> SystemInstructionHandler<Reg, Regs, Memory, PC> for IllegalEcallSystemInstructionHandler
where Reg: Register, PC: ProgramCounter<Reg::Type, Memory>,