summaryrefslogtreecommitdiffstats
path: root/zpu/sw/simulator/com/zylin/zpu/stats/StatKeeper.java
blob: 9e16e32c4ffb9b95439e3f3e9d539c21cf999e63 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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