Move some common full-system CPU initialization from the
authorSteve Reinhardt <stever@eecs.umich.edu>
Sat, 25 Oct 2003 06:20:27 +0000 (23:20 -0700)
committerSteve Reinhardt <stever@eecs.umich.edu>
Sat, 25 Oct 2003 06:20:27 +0000 (23:20 -0700)
SimpleCPU & FullCPU constructors to AlphaISA::initCPU().

cpu/simple_cpu/simple_cpu.cc:
    Move some common full-system CPU initialization from the
    SimpleCPU & FullCPU constructors to AlphaISA::initCPU().
    Make 'fault' local to SimpleCPU::tick.
cpu/simple_cpu/simple_cpu.hh:
    Make 'fault' local to SimpleCPU::tick (not an object member).

--HG--
extra : convert_revision : e878dedfff06aac0548aca8b14d66c18b8916895

arch/alpha/ev5.cc
cpu/simple_cpu/simple_cpu.cc
cpu/simple_cpu/simple_cpu.hh

index cc33f6890d8b8e4c47f5d06647bcf2ecc0e96f23..7330d7ce0094254519fb1c385f26f0a306e0e698 100644 (file)
@@ -47,6 +47,11 @@ void
 AlphaISA::initCPU(RegFile *regs)
 {
     initIPRs(regs);
+    // CPU comes up with PAL regs enabled
+    swap_palshadow(regs, true);
+
+    regs->pc = regs->ipr[IPR_PAL_BASE] + fault_addr[Reset_Fault];
+    regs->npc = regs->pc + sizeof(MachInst);
 }
 
 void
@@ -97,6 +102,7 @@ AlphaISA::initIPRs(RegFile *regs)
 
     bzero((char *)ipr, NumInternalProcRegs * sizeof(InternalProcReg));
     ipr[IPR_PAL_BASE] = PAL_BASE;
+    ipr[IPR_MCSR] = 0x6;
 }
 
 
index 891e6cdb3d48127f51e979896fe51f158e7eef95..d3d9bc2ca95617bb09f806b293ff05123988edd9 100644 (file)
@@ -126,19 +126,10 @@ SimpleCPU::SimpleCPU(const string &_name, Process *_process,
 #ifdef FULL_SYSTEM
     xc = new ExecContext(this, 0, system, itb, dtb, mem);
 
+    // initialize CPU, including PC
     TheISA::initCPU(&xc->regs);
-
-    IntReg *ipr = xc->regs.ipr;
-    ipr[TheISA::IPR_MCSR] = 0x6;
-
-    AlphaISA::swap_palshadow(&xc->regs, true);
-
-    fault = Reset_Fault;
-    xc->regs.pc = ipr[TheISA::IPR_PAL_BASE] + AlphaISA::fault_addr[fault];
-    xc->regs.npc = xc->regs.pc + sizeof(MachInst);
 #else
     xc = new ExecContext(this, /* thread_num */ 0, _process, /* asid */ 0);
-    fault = No_Fault;
 #endif // !FULL_SYSTEM
 
     icacheInterface = icache_interface;
@@ -524,8 +515,10 @@ SimpleCPU::tick()
 {
     traceData = NULL;
 
+    Fault fault = No_Fault;
+
 #ifdef FULL_SYSTEM
-    if (fault == No_Fault && AlphaISA::check_interrupts &&
+    if (AlphaISA::check_interrupts &&
         xc->cpu->check_interrupts() &&
         !PC_PAL(xc->regs.pc) &&
         status() != IcacheMissComplete) {
index 60c038163c93de5d98ba1b18e21063979db1cc64..9e2c7fd06337333f50c69fd1f864cb30990f8bb3 100644 (file)
@@ -154,9 +154,6 @@ class SimpleCPU : public BaseCPU
     // current instruction
     MachInst inst;
 
-    // current fault status
-    Fault fault;
-
     // Refcounted pointer to the one memory request.
     MemReqPtr memReq;