Skip to main content

BasicInstructionFetcher

Struct BasicInstructionFetcher 

Source
pub struct BasicInstructionFetcher<I, CustomError = CustomErrorPlaceholder>
where I: Instruction,
{ /* private fields */ }
Expand description

Basic instruction fetcher implementation.

This implementation is intentionally basic and correct, but not the most performant. It is possible to have a more efficient implementation that skips certain checks by placing additional constraints on the constructor.

Note that it loads instructions from anywhere in memory. This works, but it is likely that you want to restrict this to a specific executable region of memory.

Implementations§

Source§

impl<I, CustomError> BasicInstructionFetcher<I, CustomError>
where I: Instruction,

Source

pub fn new( return_trap_address: <<I as Instruction>::Reg as Register>::Type, pc: <<I as Instruction>::Reg as Register>::Type, ) -> Self

Create a new instance.

return_trap_address is the address at which the interpreter will stop execution (gracefully).

Trait Implementations§

Source§

impl<I, CustomError: Clone> Clone for BasicInstructionFetcher<I, CustomError>
where I: Instruction + Clone,

Source§

fn clone(&self) -> BasicInstructionFetcher<I, CustomError>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<I, CustomError: Debug> Debug for BasicInstructionFetcher<I, CustomError>
where I: Instruction + Debug,

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<I, Memory, CustomError> InstructionFetcher<I, Memory, CustomError> for BasicInstructionFetcher<I, CustomError>
where I: Instruction, Memory: VirtualMemory,

Source§

fn fetch_instruction( &mut self, memory: &Memory, ) -> Result<FetchInstructionResult<I>, ExecutionError<<<I as Instruction>::Reg as Register>::Type, CustomError>>

Fetch a single instruction at a specified address and advance the program counter on successful fetch
Source§

impl<I, Memory, CustomError> ProgramCounter<<<I as Instruction>::Reg as Register>::Type, Memory, CustomError> for BasicInstructionFetcher<I, CustomError>
where I: Instruction, Memory: VirtualMemory,

Source§

fn get_pc(&self) -> <<I as Instruction>::Reg as Register>::Type

Get the current value of the program counter
Source§

fn set_pc( &mut self, _memory: &Memory, pc: <<I as Instruction>::Reg as Register>::Type, ) -> Result<ControlFlow<()>, ProgramCounterError<<<I as Instruction>::Reg as Register>::Type, CustomError>>

Set the current value of the program counter
Source§

fn old_pc(&self, instruction_size: u8) -> Address
where Address: From<u8> + Sub<Output = Address>,

Get the previous value of the program counter before executing an instruction. Read more
Source§

impl<I, CustomError: Copy> Copy for BasicInstructionFetcher<I, CustomError>
where I: Instruction + Copy,

Auto Trait Implementations§

§

impl<I, CustomError> Freeze for BasicInstructionFetcher<I, CustomError>
where <<I as Instruction>::Reg as Register>::Type: Freeze,

§

impl<I, CustomError> RefUnwindSafe for BasicInstructionFetcher<I, CustomError>
where <<I as Instruction>::Reg as Register>::Type: RefUnwindSafe, CustomError: RefUnwindSafe,

§

impl<I, CustomError> Send for BasicInstructionFetcher<I, CustomError>
where CustomError: Send,

§

impl<I, CustomError> Sync for BasicInstructionFetcher<I, CustomError>
where CustomError: Sync,

§

impl<I, CustomError> Unpin for BasicInstructionFetcher<I, CustomError>
where <<I as Instruction>::Reg as Register>::Type: Unpin, CustomError: Unpin,

§

impl<I, CustomError> UnsafeUnpin for BasicInstructionFetcher<I, CustomError>
where <<I as Instruction>::Reg as Register>::Type: UnsafeUnpin,

§

impl<I, CustomError> UnwindSafe for BasicInstructionFetcher<I, CustomError>
where <<I as Instruction>::Reg as Register>::Type: UnwindSafe, CustomError: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.