thread_state.hh revision 2330
16019Shines@cs.fsu.edu/*
27093Sgblack@eecs.umich.edu * Copyright (c) 2006 The Regents of The University of Michigan
37093Sgblack@eecs.umich.edu * All rights reserved.
47093Sgblack@eecs.umich.edu *
57093Sgblack@eecs.umich.edu * Redistribution and use in source and binary forms, with or without
67093Sgblack@eecs.umich.edu * modification, are permitted provided that the following conditions are
77093Sgblack@eecs.umich.edu * met: redistributions of source code must retain the above copyright
87093Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer;
97093Sgblack@eecs.umich.edu * redistributions in binary form must reproduce the above copyright
107093Sgblack@eecs.umich.edu * notice, this list of conditions and the following disclaimer in the
117093Sgblack@eecs.umich.edu * documentation and/or other materials provided with the distribution;
127093Sgblack@eecs.umich.edu * neither the name of the copyright holders nor the names of its
137093Sgblack@eecs.umich.edu * contributors may be used to endorse or promote products derived from
146019Shines@cs.fsu.edu * this software without specific prior written permission.
156019Shines@cs.fsu.edu *
166019Shines@cs.fsu.edu * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
176019Shines@cs.fsu.edu * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
186019Shines@cs.fsu.edu * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
196019Shines@cs.fsu.edu * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
206019Shines@cs.fsu.edu * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
216019Shines@cs.fsu.edu * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
226019Shines@cs.fsu.edu * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
236019Shines@cs.fsu.edu * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
246019Shines@cs.fsu.edu * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
256019Shines@cs.fsu.edu * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
266019Shines@cs.fsu.edu * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
276019Shines@cs.fsu.edu */
286019Shines@cs.fsu.edu
296019Shines@cs.fsu.edu#ifndef __CPU_O3_THREAD_STATE_HH__
306019Shines@cs.fsu.edu#define __CPU_O3_THREAD_STATE_HH__
316019Shines@cs.fsu.edu
326019Shines@cs.fsu.edu#include "arch/faults.hh"
336019Shines@cs.fsu.edu#include "arch/isa_traits.hh"
346019Shines@cs.fsu.edu#include "cpu/exec_context.hh"
356019Shines@cs.fsu.edu#include "cpu/thread_state.hh"
366019Shines@cs.fsu.edu
376019Shines@cs.fsu.educlass Event;
386019Shines@cs.fsu.educlass Process;
396019Shines@cs.fsu.edu
406019Shines@cs.fsu.edu#if FULL_SYSTEM
416735Sgblack@eecs.umich.educlass EndQuiesceEvent;
426735Sgblack@eecs.umich.educlass FunctionProfile;
436019Shines@cs.fsu.educlass ProfileNode;
446019Shines@cs.fsu.edu#else
456019Shines@cs.fsu.educlass FunctionalMemory;
466019Shines@cs.fsu.educlass Process;
476019Shines@cs.fsu.edu#endif
486019Shines@cs.fsu.edu
496019Shines@cs.fsu.edu/**
506019Shines@cs.fsu.edu * Class that has various thread state, such as the status, the
516019Shines@cs.fsu.edu * current instruction being processed, whether or not the thread has
526019Shines@cs.fsu.edu * a trap pending or is being externally updated, the ExecContext
537362Sgblack@eecs.umich.edu * proxy pointer, etc.  It also handles anything related to a specific
546735Sgblack@eecs.umich.edu * thread's process, such as syscalls and checking valid addresses.
556019Shines@cs.fsu.edu */
567362Sgblack@eecs.umich.edutemplate <class Impl>
576735Sgblack@eecs.umich.edustruct O3ThreadState : public ThreadState {
586019Shines@cs.fsu.edu    typedef ExecContext::Status Status;
597362Sgblack@eecs.umich.edu    typedef typename Impl::FullCPU FullCPU;
606735Sgblack@eecs.umich.edu
616019Shines@cs.fsu.edu    Status _status;
627362Sgblack@eecs.umich.edu
636735Sgblack@eecs.umich.edu    // Current instruction
646019Shines@cs.fsu.edu    TheISA::MachInst inst;
657362Sgblack@eecs.umich.edu  private:
666735Sgblack@eecs.umich.edu    FullCPU *cpu;
676019Shines@cs.fsu.edu  public:
687362Sgblack@eecs.umich.edu
696735Sgblack@eecs.umich.edu    bool inSyscall;
706019Shines@cs.fsu.edu
717362Sgblack@eecs.umich.edu    bool trapPending;
726735Sgblack@eecs.umich.edu
736019Shines@cs.fsu.edu#if FULL_SYSTEM
746735Sgblack@eecs.umich.edu    O3ThreadState(FullCPU *_cpu, int _thread_num, FunctionalMemory *_mem)
757362Sgblack@eecs.umich.edu        : ThreadState(-1, _thread_num, _mem),
766735Sgblack@eecs.umich.edu          inSyscall(0), trapPending(0)
776735Sgblack@eecs.umich.edu    { }
786019Shines@cs.fsu.edu#else
796735Sgblack@eecs.umich.edu    O3ThreadState(FullCPU *_cpu, int _thread_num, Process *_process, int _asid)
807400SAli.Saidi@ARM.com        : ThreadState(-1, _thread_num, _process->getMemory(), _process, _asid),
816735Sgblack@eecs.umich.edu          cpu(_cpu), inSyscall(0), trapPending(0)
826735Sgblack@eecs.umich.edu    { }
836735Sgblack@eecs.umich.edu
847400SAli.Saidi@ARM.com    O3ThreadState(FullCPU *_cpu, int _thread_num, FunctionalMemory *_mem,
856735Sgblack@eecs.umich.edu                  int _asid)
866735Sgblack@eecs.umich.edu        : ThreadState(-1, _thread_num, _mem, NULL, _asid),
876735Sgblack@eecs.umich.edu          cpu(_cpu), inSyscall(0), trapPending(0)
886019Shines@cs.fsu.edu    { }
896019Shines@cs.fsu.edu#endif
906019Shines@cs.fsu.edu
916735Sgblack@eecs.umich.edu    ExecContext *xcProxy;
926735Sgblack@eecs.umich.edu
936735Sgblack@eecs.umich.edu    ExecContext *getXCProxy() { return xcProxy; }
947362Sgblack@eecs.umich.edu
956019Shines@cs.fsu.edu    Status status() const { return _status; }
966735Sgblack@eecs.umich.edu
976735Sgblack@eecs.umich.edu    void setStatus(Status new_status) { _status = new_status; }
986735Sgblack@eecs.umich.edu
996019Shines@cs.fsu.edu#if !FULL_SYSTEM
1006735Sgblack@eecs.umich.edu    bool validInstAddr(Addr addr)
1016735Sgblack@eecs.umich.edu    { return process->validInstAddr(addr); }
1026735Sgblack@eecs.umich.edu
1036735Sgblack@eecs.umich.edu    bool validDataAddr(Addr addr)
1046735Sgblack@eecs.umich.edu    { return process->validDataAddr(addr); }
1056735Sgblack@eecs.umich.edu#endif
1066735Sgblack@eecs.umich.edu
1076735Sgblack@eecs.umich.edu    bool misspeculating() { return false; }
1086735Sgblack@eecs.umich.edu
1096735Sgblack@eecs.umich.edu    void setInst(TheISA::MachInst _inst) { inst = _inst; }
1107093Sgblack@eecs.umich.edu
1116735Sgblack@eecs.umich.edu    Counter readFuncExeInst() { return funcExeInst; }
1126735Sgblack@eecs.umich.edu
1136735Sgblack@eecs.umich.edu    void setFuncExeInst(Counter new_val) { funcExeInst = new_val; }
1147302Sgblack@eecs.umich.edu
1156735Sgblack@eecs.umich.edu#if !FULL_SYSTEM
1166735Sgblack@eecs.umich.edu    void syscall() { process->syscall(xcProxy); }
1176735Sgblack@eecs.umich.edu#endif
1186735Sgblack@eecs.umich.edu};
1196735Sgblack@eecs.umich.edu
1206735Sgblack@eecs.umich.edu#endif // __CPU_O3_THREAD_STATE_HH__
1216735Sgblack@eecs.umich.edu