Skip to main content

ThreadedExecutableInstruction

Trait ThreadedExecutableInstruction 

Source
pub trait ThreadedExecutableInstruction<Regs, Env, Memory, PC>
where Self: ExecutableInstruction<Regs, Env, Memory, PC>, PC: InstructionFetcher<Self, Memory>,
{ // Required method fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Self>; }
Expand description

Tail-call-threaded counterpart of ExecutableInstruction.

ExecutableInstruction::execute() describes what a single instruction does and leaves both fetching and control flow to a driver loop. This trait instead runs the whole program: it is generated as one handler function per instruction variant, each of which executes its own instruction and then tail-calls (become) the handler of the next one, so there is no loop and no return until execution stops. Each handler touches only the operands its own instruction names, which is what the shared loop cannot do.

Instruction implementations are unaffected: the handlers are assembled from the very same match arms that ExecutableInstruction::execute() are assembled from, so both paths execute identical logic and a caller picks between them purely on the trade between code size (execute) and throughput (execute_threaded).

This trait is deliberately not const, unlike ExecutableInstruction: dispatch goes through a table of function pointers, and calls through a function pointer are not allowed in const fn.

Required Methods§

Source

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Self>

Execute instructions starting at the instruction fetcher’s current position and continue until execution stops or fails.

The instruction fetcher is taken by value rather than behind a reference so that it stays in registers across the whole handler chain.

env is taken by value for the same reason and one more: an owned value can be a zero-sized type, which occupies no argument register at all, whereas a &mut occupies one whether there is anything behind it or not. Most configurations have a stateless environment, which thus vanishes, allowing more registers for other arguments. A configuration that does have a state passes a &mut to it (which is an owned value too and for which there are blanket implementations for convenience).

Dyn Compatibility§

This trait is not dyn compatible.

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

Implementations on Foreign Types§

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv32AInstruction<Reg>
where Reg: Register<Type = u32>, Regs: RegisterFile<Reg>, Memory: VirtualMemory, Env: ReservationSet<Reg>, PC: InstructionFetcher<Rv32AInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv32AInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv32BInstruction<Reg>
where Reg: Register<Type = u32>, Regs: RegisterFile<Reg>, PC: InstructionFetcher<Rv32BInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv32BInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv32Instruction<Reg>
where Reg: Register<Type = u32>, Regs: RegisterFile<Reg>, Env: SystemInstructionHandler<Reg, Regs, Memory, PC>, Memory: VirtualMemory, PC: ProgramCounter<Reg::Type, Memory> + InstructionFetcher<Rv32Instruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv32Instruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv32MInstruction<Reg>
where Reg: Register<Type = u32>, Regs: RegisterFile<Reg>, PC: InstructionFetcher<Rv32MInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv32MInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv32ZaamoInstruction<Reg>
where Reg: Register<Type = u32>, Regs: RegisterFile<Reg>, Memory: VirtualMemory, PC: InstructionFetcher<Rv32ZaamoInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv32ZaamoInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv32ZabhaInstruction<Reg>
where Reg: Register<Type = u32>, Regs: RegisterFile<Reg>, Memory: VirtualMemory, PC: InstructionFetcher<Rv32ZabhaInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv32ZabhaInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv32ZacasInstruction<Reg>
where Reg: Register<Type = u32>, Regs: RegisterFile<Reg>, Memory: VirtualMemory, PC: InstructionFetcher<Rv32ZacasInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv32ZacasInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv32ZalasrInstruction<Reg>
where Reg: Register<Type = u32>, Regs: RegisterFile<Reg>, Memory: VirtualMemory, PC: InstructionFetcher<Rv32ZalasrInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv32ZalasrInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv32ZalrscInstruction<Reg>
where Reg: Register<Type = u32>, Regs: RegisterFile<Reg>, Memory: VirtualMemory, Env: ReservationSet<Reg>, PC: InstructionFetcher<Rv32ZalrscInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv32ZalrscInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv32ZbaInstruction<Reg>
where Reg: Register<Type = u32>, Regs: RegisterFile<Reg>, PC: InstructionFetcher<Rv32ZbaInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv32ZbaInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv32ZbbInstruction<Reg>
where Reg: Register<Type = u32>, Regs: RegisterFile<Reg>, PC: InstructionFetcher<Rv32ZbbInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv32ZbbInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv32ZbcInstruction<Reg>
where Reg: Register<Type = u32>, Regs: RegisterFile<Reg>, PC: InstructionFetcher<Rv32ZbcInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv32ZbcInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv32ZbkbInstruction<Reg>
where Reg: Register<Type = u32>, Regs: RegisterFile<Reg>, PC: InstructionFetcher<Rv32ZbkbInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv32ZbkbInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv32ZbkcInstruction<Reg>
where Reg: Register<Type = u32>, Regs: RegisterFile<Reg>, PC: InstructionFetcher<Rv32ZbkcInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv32ZbkcInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv32ZbkxInstruction<Reg>
where Reg: Register<Type = u32>, Regs: RegisterFile<Reg>, PC: InstructionFetcher<Rv32ZbkxInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv32ZbkxInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv32ZbsInstruction<Reg>
where Reg: Register<Type = u32>, Regs: RegisterFile<Reg>, PC: InstructionFetcher<Rv32ZbsInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv32ZbsInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv32ZcaInstruction<Reg>
where Reg: Register<Type = u32>, Regs: RegisterFile<Reg>, Memory: VirtualMemory, PC: ProgramCounter<Reg::Type, Memory> + InstructionFetcher<Rv32ZcaInstruction<Reg>, Memory>, Env: SystemInstructionHandler<Reg, Regs, Memory, PC>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv32ZcaInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv32ZcbInstruction<Reg>
where Reg: Register<Type = u32>, Regs: RegisterFile<Reg>, Memory: VirtualMemory, PC: ProgramCounter<Reg::Type, Memory> + InstructionFetcher<Rv32ZcbInstruction<Reg>, Memory>, Env: SystemInstructionHandler<Reg, Regs, Memory, PC>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv32ZcbInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv32ZcmpInstruction<Reg>
where Reg: ZcmpRegister<Type = u32> + Register<Type = u32>, Regs: RegisterFile<Reg>, Memory: VirtualMemory, PC: ProgramCounter<Reg::Type, Memory> + InstructionFetcher<Rv32ZcmpInstruction<Reg>, Memory>, Env: SystemInstructionHandler<Reg, Regs, Memory, PC>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv32ZcmpInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv32ZknInstruction<Reg>
where Reg: Register<Type = u32>, Regs: RegisterFile<Reg>, PC: InstructionFetcher<Rv32ZknInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv32ZknInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv32ZkndInstruction<Reg>
where Reg: Register<Type = u32>, Regs: RegisterFile<Reg>, PC: InstructionFetcher<Rv32ZkndInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv32ZkndInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv32ZkneInstruction<Reg>
where Reg: Register<Type = u32>, Regs: RegisterFile<Reg>, PC: InstructionFetcher<Rv32ZkneInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv32ZkneInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv32ZknhInstruction<Reg>
where Reg: Register<Type = u32>, Regs: RegisterFile<Reg>, PC: InstructionFetcher<Rv32ZknhInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv32ZknhInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv32ZmmulInstruction<Reg>
where Reg: Register<Type = u32>, Regs: RegisterFile<Reg>, PC: InstructionFetcher<Rv32ZmmulInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv32ZmmulInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv64AInstruction<Reg>
where Reg: Register<Type = u64>, Regs: RegisterFile<Reg>, Memory: VirtualMemory, Env: ReservationSet<Reg>, PC: InstructionFetcher<Rv64AInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv64AInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv64BInstruction<Reg>
where Reg: Register<Type = u64>, Regs: RegisterFile<Reg>, PC: InstructionFetcher<Rv64BInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv64BInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv64Instruction<Reg>
where Reg: Register<Type = u64>, Regs: RegisterFile<Reg>, Env: SystemInstructionHandler<Reg, Regs, Memory, PC>, Memory: VirtualMemory, PC: ProgramCounter<Reg::Type, Memory> + InstructionFetcher<Rv64Instruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv64Instruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv64MInstruction<Reg>
where Reg: Register<Type = u64>, Regs: RegisterFile<Reg>, PC: InstructionFetcher<Rv64MInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv64MInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv64ZaamoInstruction<Reg>
where Reg: Register<Type = u64>, Regs: RegisterFile<Reg>, Memory: VirtualMemory, PC: InstructionFetcher<Rv64ZaamoInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv64ZaamoInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv64ZabhaInstruction<Reg>
where Reg: Register<Type = u64>, Regs: RegisterFile<Reg>, Memory: VirtualMemory, PC: InstructionFetcher<Rv64ZabhaInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv64ZabhaInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv64ZacasInstruction<Reg>
where Reg: Register<Type = u64>, Regs: RegisterFile<Reg>, Memory: VirtualMemory, PC: InstructionFetcher<Rv64ZacasInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv64ZacasInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv64ZalasrInstruction<Reg>
where Reg: Register<Type = u64>, Regs: RegisterFile<Reg>, Memory: VirtualMemory, PC: InstructionFetcher<Rv64ZalasrInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv64ZalasrInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv64ZalrscInstruction<Reg>
where Reg: Register<Type = u64>, Regs: RegisterFile<Reg>, Memory: VirtualMemory, Env: ReservationSet<Reg>, PC: InstructionFetcher<Rv64ZalrscInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv64ZalrscInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv64ZbaInstruction<Reg>
where Reg: Register<Type = u64>, Regs: RegisterFile<Reg>, PC: InstructionFetcher<Rv64ZbaInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv64ZbaInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv64ZbbInstruction<Reg>
where Reg: Register<Type = u64>, Regs: RegisterFile<Reg>, PC: InstructionFetcher<Rv64ZbbInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv64ZbbInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv64ZbcInstruction<Reg>
where Reg: Register<Type = u64>, Regs: RegisterFile<Reg>, PC: InstructionFetcher<Rv64ZbcInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv64ZbcInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv64ZbkbInstruction<Reg>
where Reg: Register<Type = u64>, Regs: RegisterFile<Reg>, PC: InstructionFetcher<Rv64ZbkbInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv64ZbkbInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv64ZbkcInstruction<Reg>
where Reg: Register<Type = u64>, Regs: RegisterFile<Reg>, PC: InstructionFetcher<Rv64ZbkcInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv64ZbkcInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv64ZbkxInstruction<Reg>
where Reg: Register<Type = u64>, Regs: RegisterFile<Reg>, PC: InstructionFetcher<Rv64ZbkxInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv64ZbkxInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv64ZbsInstruction<Reg>
where Reg: Register<Type = u64>, Regs: RegisterFile<Reg>, PC: InstructionFetcher<Rv64ZbsInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv64ZbsInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv64ZcaInstruction<Reg>
where Reg: Register<Type = u64>, Regs: RegisterFile<Reg>, Memory: VirtualMemory, PC: ProgramCounter<Reg::Type, Memory> + InstructionFetcher<Rv64ZcaInstruction<Reg>, Memory>, Env: SystemInstructionHandler<Reg, Regs, Memory, PC>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv64ZcaInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv64ZcbInstruction<Reg>
where Reg: Register<Type = u64>, Regs: RegisterFile<Reg>, Memory: VirtualMemory, PC: ProgramCounter<Reg::Type, Memory> + InstructionFetcher<Rv64ZcbInstruction<Reg>, Memory>, Env: SystemInstructionHandler<Reg, Regs, Memory, PC>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv64ZcbInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv64ZcmpInstruction<Reg>
where Reg: ZcmpRegister<Type = u64> + Register<Type = u64>, Regs: RegisterFile<Reg>, Memory: VirtualMemory, PC: ProgramCounter<Reg::Type, Memory> + InstructionFetcher<Rv64ZcmpInstruction<Reg>, Memory>, Env: SystemInstructionHandler<Reg, Regs, Memory, PC>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv64ZcmpInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv64ZknInstruction<Reg>
where Reg: Register<Type = u64>, Regs: RegisterFile<Reg>, PC: InstructionFetcher<Rv64ZknInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv64ZknInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv64ZkndInstruction<Reg>
where Reg: Register<Type = u64>, Regs: RegisterFile<Reg>, PC: InstructionFetcher<Rv64ZkndInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv64ZkndInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv64ZkneInstruction<Reg>
where Reg: Register<Type = u64>, Regs: RegisterFile<Reg>, PC: InstructionFetcher<Rv64ZkneInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv64ZkneInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv64ZknhInstruction<Reg>
where Reg: Register<Type = u64>, Regs: RegisterFile<Reg>, PC: InstructionFetcher<Rv64ZknhInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv64ZknhInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for Rv64ZmmulInstruction<Reg>
where Reg: Register<Type = u64>, Regs: RegisterFile<Reg>, PC: InstructionFetcher<Rv64ZmmulInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<Rv64ZmmulInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for ZawrsInstruction<Reg>
where Reg: Register, Env: WrsHandler, PC: InstructionFetcher<ZawrsInstruction<Reg>, Memory>, Regs: RegisterFile<Reg>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<ZawrsInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for ZicondInstruction<Reg>
where Reg: Register, Regs: RegisterFile<Reg>, PC: InstructionFetcher<ZicondInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<ZicondInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for ZicsrInstruction<Reg>
where Reg: Register, Regs: RegisterFile<Reg>, Env: Csrs<Reg>, PC: InstructionFetcher<ZicsrInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<ZicsrInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for ZkrInstruction<Reg>
where Reg: Register, Env: ZkrSeedSource + Csrs<Reg>, Regs: RegisterFile<Reg>, PC: InstructionFetcher<ZkrInstruction<Reg>, Memory>,

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<ZkrInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for ZvbbInstruction<Reg>

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<ZvbbInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for ZvbcInstruction<Reg>

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<ZvbcInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for ZveXxInstruction<Reg>

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<ZveXxInstruction<Reg>>

§

impl<Reg, Regs, Env, Memory, PC> ThreadedExecutableInstruction<Regs, Env, Memory, PC> for ZvkbInstruction<Reg>

§

fn execute_threaded( instruction_fetcher: PC, regs: &mut Regs, env: Env, memory: &mut Memory, ) -> ThreadedExecutionResult<ZvkbInstruction<Reg>>

Implementors§