group micro ops by the instruction they come from when retiring
Some checks failed
/ test (pull_request) Failing after 3m56s

This commit is contained in:
Jacob Lifshay 2026-05-05 19:33:25 -07:00
parent 83b3f7bac9
commit 09c8c194e0
Signed by: programmerjake
SSH key fingerprint: SHA256:HnFTLGpSm4Q4Fj502oCFisjZSoakwEuTsJJMSke63RQ
3 changed files with 286045 additions and 274549 deletions

View file

@ -736,8 +736,8 @@ impl<'a, C: PhantomConstCpuConfig> MockNextPcState<'a, C> {
}
let insn = self.insns.insns.get(&self.next_pc).ok_or(())?;
let fallthrough_pc = self.next_pc.wrapping_add(insn.size_in_bytes.into());
let is_last_mop_index = self.next_mop_index + 1 >= insn.mops.len();
let mut predicted_next_pc = if is_last_mop_index {
let is_last_mop_in_insn = self.next_mop_index + 1 >= insn.mops.len();
let mut predicted_next_pc = if is_last_mop_in_insn {
fallthrough_pc
} else {
self.next_pc
@ -768,11 +768,12 @@ impl<'a, C: PhantomConstCpuConfig> MockNextPcState<'a, C> {
predicted_next_pc,
size_in_bytes: insn.size_in_bytes.cast_to_static::<UInt<_>>(),
is_first_mop_in_insn: self.next_mop_index == 0,
is_last_mop_in_insn,
mop,
};
println!("pushed to fetch queue: {mop:?}");
self.fetch_queue.push_back(mop);
if is_last_mop_index {
if is_last_mop_in_insn {
self.next_mop_index = 0;
self.next_pc = predicted_next_pc;
} else {
@ -1637,6 +1638,7 @@ trait MockExecutionStateTrait: Default {
predicted_next_pc,
size_in_bytes,
is_first_mop_in_insn: _,
is_last_mop_in_insn: _,
mop,
} = mop;
let fallthrough_pc = pc
@ -2453,6 +2455,7 @@ impl<C: PhantomConstCpuConfig> MockLoadStoreUnitState<C> {
predicted_next_pc,
size_in_bytes,
is_first_mop_in_insn,
is_last_mop_in_insn,
mop,
} = mop;
let mop = #[hdl(sim)]
@ -2468,6 +2471,7 @@ impl<C: PhantomConstCpuConfig> MockLoadStoreUnitState<C> {
predicted_next_pc,
size_in_bytes,
is_first_mop_in_insn,
is_last_mop_in_insn,
mop,
};
self.ops.push_back(MockLoadStoreOp {