thread_state.hh revision 2292
111308Santhony.gutierrez@amd.com
211308Santhony.gutierrez@amd.com#ifndef __CPU_THREAD_STATE_HH__
311308Santhony.gutierrez@amd.com#define __CPU_THREAD_STATE_HH__
411308Santhony.gutierrez@amd.com
511308Santhony.gutierrez@amd.com#include "cpu/exec_context.hh"
611308Santhony.gutierrez@amd.com
711308Santhony.gutierrez@amd.com#if FULL_SYSTEM
811308Santhony.gutierrez@amd.comclass EndQuiesceEvent;
911308Santhony.gutierrez@amd.comclass FunctionProfile;
1011308Santhony.gutierrez@amd.comclass ProfileNode;
1111308Santhony.gutierrez@amd.com#else
1211308Santhony.gutierrez@amd.comclass Process;
1311308Santhony.gutierrez@amd.comclass FunctionalMemory;
1411308Santhony.gutierrez@amd.com#endif
1511308Santhony.gutierrez@amd.com
1611308Santhony.gutierrez@amd.comstruct ThreadState {
1711308Santhony.gutierrez@amd.com#if FULL_SYSTEM
1811308Santhony.gutierrez@amd.com    ThreadState(int _cpuId, int _tid, FunctionalMemory *_mem)
1911308Santhony.gutierrez@amd.com        : cpuId(_cpuId), tid(_tid), mem(_mem), lastActivate(0), lastSuspend(0),
2011308Santhony.gutierrez@amd.com          profile(NULL), profileNode(NULL), profilePC(0), quiesceEvent(NULL)
2111308Santhony.gutierrez@amd.com#else
2211308Santhony.gutierrez@amd.com    ThreadState(int _cpuId, int _tid, FunctionalMemory *_mem,
2311308Santhony.gutierrez@amd.com                Process *_process, short _asid)
2411308Santhony.gutierrez@amd.com        : cpuId(_cpuId), tid(_tid), mem(_mem), process(_process), asid(_asid)
2511308Santhony.gutierrez@amd.com#endif
2611308Santhony.gutierrez@amd.com    {
2711308Santhony.gutierrez@amd.com        funcExeInst = 0;
2811308Santhony.gutierrez@amd.com        storeCondFailures = 0;
2911308Santhony.gutierrez@amd.com    }
3011308Santhony.gutierrez@amd.com
3111308Santhony.gutierrez@amd.com    ExecContext::Status status;
3211308Santhony.gutierrez@amd.com
3311308Santhony.gutierrez@amd.com    int cpuId;
3411308Santhony.gutierrez@amd.com
3511308Santhony.gutierrez@amd.com    // Index of hardware thread context on the CPU that this represents.
3611308Santhony.gutierrez@amd.com    int tid;
3711308Santhony.gutierrez@amd.com
3811308Santhony.gutierrez@amd.com    Counter numInst;
3911308Santhony.gutierrez@amd.com    Stats::Scalar<> numInsts;
4011308Santhony.gutierrez@amd.com    Stats::Scalar<> numMemRefs;
4111308Santhony.gutierrez@amd.com
4211308Santhony.gutierrez@amd.com    // number of simulated loads
4311308Santhony.gutierrez@amd.com    Counter numLoad;
4411615Sdavid.j.hashe@gmail.com    Counter startNumLoad;
4511615Sdavid.j.hashe@gmail.com
4611615Sdavid.j.hashe@gmail.com    FunctionalMemory *mem;	// functional storage for process address space
4711615Sdavid.j.hashe@gmail.com
4811615Sdavid.j.hashe@gmail.com#if FULL_SYSTEM
4911615Sdavid.j.hashe@gmail.com    Tick lastActivate;
5011308Santhony.gutierrez@amd.com    Tick lastSuspend;
5111308Santhony.gutierrez@amd.com
5211308Santhony.gutierrez@amd.com    FunctionProfile *profile;
5311308Santhony.gutierrez@amd.com    ProfileNode *profileNode;
5411308Santhony.gutierrez@amd.com    Addr profilePC;
5511308Santhony.gutierrez@amd.com
5611308Santhony.gutierrez@amd.com    EndQuiesceEvent *quiesceEvent;
5711308Santhony.gutierrez@amd.com
5811308Santhony.gutierrez@amd.com#else
5911308Santhony.gutierrez@amd.com    Process *process;
6011308Santhony.gutierrez@amd.com
6111308Santhony.gutierrez@amd.com    // Address space ID.  Note that this is used for TIMING cache
6211308Santhony.gutierrez@amd.com    // simulation only; all functional memory accesses should use
6311308Santhony.gutierrez@amd.com    // one of the FunctionalMemory pointers above.
6411308Santhony.gutierrez@amd.com    short asid;
6511308Santhony.gutierrez@amd.com
6611308Santhony.gutierrez@amd.com#endif
6711308Santhony.gutierrez@amd.com
6811308Santhony.gutierrez@amd.com    /**
6911308Santhony.gutierrez@amd.com     * Temporary storage to pass the source address from copy_load to
7011308Santhony.gutierrez@amd.com     * copy_store.
7111308Santhony.gutierrez@amd.com     * @todo Remove this temporary when we have a better way to do it.
7211308Santhony.gutierrez@amd.com     */
7311308Santhony.gutierrez@amd.com    Addr copySrcAddr;
7411308Santhony.gutierrez@amd.com    /**
7511308Santhony.gutierrez@amd.com     * Temp storage for the physical source address of a copy.
7611308Santhony.gutierrez@amd.com     * @todo Remove this temporary when we have a better way to do it.
7711308Santhony.gutierrez@amd.com     */
7811308Santhony.gutierrez@amd.com    Addr copySrcPhysAddr;
7911321Ssteve.reinhardt@amd.com
8011308Santhony.gutierrez@amd.com    /*
8111308Santhony.gutierrez@amd.com     * number of executed instructions, for matching with syscall trace
8211308Santhony.gutierrez@amd.com     * points in EIO files.
8311308Santhony.gutierrez@amd.com     */
8411308Santhony.gutierrez@amd.com    Counter funcExeInst;
8511308Santhony.gutierrez@amd.com
8611308Santhony.gutierrez@amd.com    //
8711308Santhony.gutierrez@amd.com    // Count failed store conditionals so we can warn of apparent
8811308Santhony.gutierrez@amd.com    // application deadlock situations.
8911308Santhony.gutierrez@amd.com    unsigned storeCondFailures;
9011308Santhony.gutierrez@amd.com};
9111308Santhony.gutierrez@amd.com
9211308Santhony.gutierrez@amd.com#endif // __CPU_THREAD_STATE_HH__
9311308Santhony.gutierrez@amd.com