struct ExecSchedule {
ports: [PortSchedule; 3],
}
Expand description
Execution schedule for all ports
This is a scoreboard that keeps track of which CPU units are busy in which cycles, so we can estimate a timestamp at which each instruction will write its result.
Fields§
§ports: [PortSchedule; 3]
Execution schedule (busy flags) for each port
Implementations§
Source§impl ExecSchedule
impl ExecSchedule
Sourcefn micro_plan(&self, begin: Cycle, ports: ExecPorts) -> Result<MicroOpPlan, ()>
fn micro_plan(&self, begin: Cycle, ports: ExecPorts) -> Result<MicroOpPlan, ()>
Calculate the next cycle at which we could schedule one micro-op.
HashX always searches execution ports in the same order, and it will look ahead up to the entire length of the schedule before failing.
Sourcefn mark_micro_busy(&mut self, plan: MicroOpPlan)
fn mark_micro_busy(&mut self, plan: MicroOpPlan)
Mark the schedule busy according to a previously calculated plan.
Sourcefn instruction_plan(
&self,
begin: Cycle,
op: Opcode,
) -> Result<InstructionPlan, ()>
fn instruction_plan( &self, begin: Cycle, op: Opcode, ) -> Result<InstructionPlan, ()>
Calculate a timing plan describing the cycle and execution units we could use for scheduling one entire instruction.
This takes place after the Opcode
has been chosen but before
a full Instruction
can be assembled.
Sourcefn mark_instruction_busy(&mut self, plan: &InstructionPlan)
fn mark_instruction_busy(&mut self, plan: &InstructionPlan)
Mark each micro-op in an InstructionPlan as busy in the schedule.
Trait Implementations§
Source§impl Clone for ExecSchedule
impl Clone for ExecSchedule
Source§fn clone(&self) -> ExecSchedule
fn clone(&self) -> ExecSchedule
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more