reschedulePC => {
-- Get Lizard to Reschedule on the next instruction
status: DragOpsCross.IFUStatusRec ← LOOPHOLE[sim.processor.regs[ifuStatus]];
status.reschedule ← TRUE;
sim.processor.regs[ifuStatus] ← LOOPHOLE[status];
deltaInstrCount ← 0; -- Lizard doesn't generate a trapped instruction for Reschedule
};
ENDCASE => {
lizardNewPC: Dragon.Word ← DragOpsCrossUtils.WordToCard[sim.processor.regs[ifuPC]];
DragonRosemary.Assert[ sim.processor.stats.instructions = clusterInst.instr , "Cluster & Lizard instruction counts disagree"];
DragonRosemary.Assert[ lizardNewPC = clusterInst.pc , "Cluster & Lizard PC's disagree"];
DoInstruction[sim];
CheckAInB[a: Atom.GetProp[$Cluster, $RegStores], b: sim.lastInstrOps];
CheckAInB[a: sim.lastInstrOps, b: Atom.GetProp[$Cluster, $RegStores]];
DragonRosemary.Assert[ (sim.control=doAbort) = clusterInst.trapped, "Cluster & Lizard disagree about trap"];
IF clusterInst.trapped THEN deltaInstrCount ← 0;
};