summaryrefslogtreecommitdiffstats
path: root/zpu/sw/simulator/com/zylin/zpu/stats/StatKeeper.java
diff options
context:
space:
mode:
Diffstat (limited to 'zpu/sw/simulator/com/zylin/zpu/stats/StatKeeper.java')
-rw-r--r--zpu/sw/simulator/com/zylin/zpu/stats/StatKeeper.java52
1 files changed, 52 insertions, 0 deletions
diff --git a/zpu/sw/simulator/com/zylin/zpu/stats/StatKeeper.java b/zpu/sw/simulator/com/zylin/zpu/stats/StatKeeper.java
new file mode 100644
index 0000000..9e16e32
--- /dev/null
+++ b/zpu/sw/simulator/com/zylin/zpu/stats/StatKeeper.java
@@ -0,0 +1,52 @@
+package com.zylin.zpu.stats;
+
+import com.zylin.zpu.simulator.Machine;
+import com.zylin.zpu.simulator.State;
+
+public class StatKeeper
+{
+ private Instruction top=new Instruction();
+ private int trackPos;
+
+ private State[] state = new State[3];
+ private Machine simulator;
+ /**
+ * @param simulator
+ */
+ public StatKeeper(Machine simulator)
+ {
+ this.simulator=simulator;
+ for (int i=0; i<state.length; i++)
+ {
+ state[i]=new State();
+ }
+ }
+ /**
+ * this instruction has been retired. Count it.
+ */
+ public void countInstruction(int instruction)
+ {
+ State currentState=state[trackPos%state.length];
+ currentState.cycle=simulator.getPrevCycles(); // start of instruction
+ currentState.insn=instruction;
+ trackPos++;
+ int backtrackNum;
+ backtrackNum=Math.min(trackPos, state.length);
+ for (int i=0; i<backtrackNum; i++)
+ {
+ Instruction t=top;
+ for (int j=0; j<=i; j++)
+ {
+ currentState=state[(trackPos-backtrackNum+j)%state.length];
+ t=t.addInstruction(currentState.insn);
+ }
+ t.count++;
+ }
+
+ }
+ public void printStats()
+ {
+ top.printStats();
+
+ }
+}
OpenPOWER on IntegriCloud