1/* 2 * Copyright (c) 2004-2005 The Regents of The University of Michigan 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer; --- 43 unchanged lines hidden (view full) --- 52//#include "cpu/o3/thread_context.hh" 53#include "sim/process.hh" 54 55template <class> 56class Checker; 57class ThreadContext; 58template <class> 59class O3ThreadContext; |
60 61class Checkpoint; |
62class MemObject; 63class Process; 64 65class BaseO3CPU : public BaseCPU 66{ 67 //Stuff that's pretty ISA independent will go here. 68 public: 69 typedef BaseCPU::Params Params; --- 36 unchanged lines hidden (view full) --- 106 friend class O3ThreadContext<Impl>; 107 108 public: 109 enum Status { 110 Running, 111 Idle, 112 Halted, 113 Blocked, |
114 Drained, |
115 SwitchedOut 116 }; 117 118 /** Overall CPU status. */ 119 Status _status; 120 121 /** Per-thread status in CPU, used for SMT. */ 122 Status _threadStatus[Impl::MaxThreads]; --- 191 unchanged lines hidden (view full) --- 314 315 /** Executes a syscall on this cycle. 316 * --------------------------------------- 317 * Note: this is a virtual function. CPU-Specific 318 * functionality defined in derived classes 319 */ 320 virtual void syscall(int tid) { panic("Unimplemented!"); } 321 |
322 /** Starts draining the CPU's pipeline of all instructions in 323 * order to stop all memory accesses. */ 324 virtual bool drain(Event *drain_event); |
325 |
326 /** Resumes execution after a drain. */ 327 virtual void resume(); 328 |
329 /** Signals to this CPU that a stage has completed switching out. */ |
330 void signalDrained(); |
331 |
332 /** Switches out this CPU. */ 333 virtual void switchOut(); 334 |
335 /** Takes over from another CPU. */ |
336 virtual void takeOverFrom(BaseCPU *oldCPU); |
337 338 /** Get the current instruction sequence number, and increment it. */ 339 InstSeqNum getAndIncrementInstSeq() 340 { return globalSeqNum++; } 341 342#if FULL_SYSTEM 343 /** Check if this address is a valid instruction address. */ 344 bool validInstAddr(Addr addr) { return true; } --- 256 unchanged lines hidden (view full) --- 601 602 /** Pointer to physical memory. */ 603 PhysicalMemory *physmem; 604#endif 605 606 /** Pointer to memory. */ 607 MemObject *mem; 608 |
609 /** Event to call process() on once draining has completed. */ 610 Event *drainEvent; |
611 |
612 /** Counter of how many stages have completed draining. */ 613 int drainCount; 614 |
615 /** Pointers to all of the threads in the CPU. */ 616 std::vector<Thread *> thread; 617 618 /** Pointer to the icache interface. */ 619 MemInterface *icacheInterface; 620 /** Pointer to the dcache interface. */ 621 MemInterface *dcacheInterface; 622 --- 43 unchanged lines hidden --- |