Merge with main repository.
authorGabe Black <gblack@eecs.umich.edu>
Sat, 7 Jan 2012 10:10:34 +0000 (02:10 -0800)
committerGabe Black <gblack@eecs.umich.edu>
Sat, 7 Jan 2012 10:10:34 +0000 (02:10 -0800)
25 files changed:
1  2 
src/arch/alpha/ev5.cc
src/arch/arm/isa/insts/neon.isa
src/arch/mips/isa/decoder.isa
src/arch/mips/isa/includes.isa
src/arch/mips/tlb.cc
src/arch/power/tlb.cc
src/arch/sparc/isa/formats/mem/util.isa
src/cpu/base.cc
src/cpu/inorder/cpu.cc
src/cpu/legiontrace.cc
src/cpu/o3/cpu.cc
src/cpu/o3/rename_impl.hh
src/dev/io_device.cc
src/dev/io_device.hh
src/kern/tru64/tru64.hh
src/mem/SConscript
src/mem/page_table.cc
src/mem/translating_port.cc
src/python/swig/pyobject.cc
src/sim/System.py
src/sim/process.cc
src/sim/process.hh
src/sim/syscall_emul.hh
src/sim/system.cc
src/sim/system.hh

index 9863a73700f99dfe01b3c64f6089fa1f85b66e0b,6259f8fc21dc4d62e24f61342686d534c8ac01b1..4dcc58ffe66f1cfd576d3608ffcede343e67de96
@@@ -255,10 -260,11 +253,9 @@@ ISA::setIpr(int idx, uint64_t val, Thre
  
        case IPR_PALtemp23:
          // write entire quad w/ no side-effect
-         old = ipr[idx];
-         ipr[idx] = val;
 -#if FULL_SYSTEM
          if (tc->getKernelStats())
-             tc->getKernelStats()->context(old, val, tc);
+             tc->getKernelStats()->context(ipr[idx], val, tc);
 -#endif
+         ipr[idx] = val;
          break;
  
        case IPR_DTB_PTE:
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index d6eee8a4dddd9e5ac7e970ed72003597dc0eb55e,0ca56252e7d688bfd0b90b412dbcae37db1cde78..a770591811e75c7bea55270f14a2717a29a3f709
@@@ -326,8 -326,8 +326,8 @@@ let {
      '''
  
      TruncateEA = '''
-                 if (!FullSystem)
-                     EA = Pstate<3:> ? EA<31:0> : EA;
 -        if (!FULL_SYSTEM)
++        if (!FullSystem)
+             EA = Pstate<3:> ? EA<31:0> : EA;
      '''
  }};
  
diff --cc src/cpu/base.cc
Simple merge
index 9d6ecc7e107c35dd26348e313d4e19d8bacb96f5,232554db2ee1a54bab372af0cb8c912c2d7feb9d..010bdb512c7d83c457234bbfd8608785648a2786
@@@ -214,32 -218,33 +213,33 @@@ InOrderCPU::InOrderCPU(Params *params
      // Resize for Multithreading CPUs
      thread.resize(numThreads);
  
 -#if !FULL_SYSTEM
+     ThreadID active_threads = params->workload.size();
 +    if (FullSystem) {
 +        active_threads = 1;
 +    } else {
 +        active_threads = params->workload.size();
  
 -    if (active_threads > MaxThreads) {
 -        panic("Workload Size too large. Increase the 'MaxThreads'"
 -              "in your InOrder implementation or "
 -              "edit your workload size.");
 -    }
 +        if (active_threads > MaxThreads) {
 +            panic("Workload Size too large. Increase the 'MaxThreads'"
 +                  "in your InOrder implementation or "
 +                  "edit your workload size.");
 +        }
  
 -    
 -    if (active_threads > 1) {
 -        threadModel = (InOrderCPU::ThreadModel) params->threadModel;
 -
 -        if (threadModel == SMT) {
 -            DPRINTF(InOrderCPU, "Setting Thread Model to SMT.\n");            
 -        } else if (threadModel == SwitchOnCacheMiss) {
 -            DPRINTF(InOrderCPU, "Setting Thread Model to "
 -                    "Switch On Cache Miss\n");
 +
 +        if (active_threads > 1) {
 +            threadModel = (InOrderCPU::ThreadModel) params->threadModel;
 +
 +            if (threadModel == SMT) {
 +                DPRINTF(InOrderCPU, "Setting Thread Model to SMT.\n");
 +            } else if (threadModel == SwitchOnCacheMiss) {
 +                DPRINTF(InOrderCPU, "Setting Thread Model to "
 +                        "Switch On Cache Miss\n");
 +            }
 +
 +        } else {
 +            threadModel = Single;
          }
 -        
 -    } else {
 -        threadModel = Single;
      }
 -     
 -        
 -    
 -#endif
  
      // Bind the fetch & data ports from the resource pool.
      fetchPortIdx = resPool->getPortIdx(params->fetchMemPort);
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index c260ba2d4beda2a523ba5796baa310ff1d94fd12,7622c2d4882302f3e5a413614c02fae287d42784..0ec2dbc073a784b0d818b04748d59446ac0e69e6
@@@ -215,13 -224,12 +224,13 @@@ PageTable::unserialize(Checkpoint *cp, 
  
      pTable.clear();
  
 -    while(i < count) {
 +    while (i < count) {
 +        TheISA::TlbEntry *entry;
 +        Addr vaddr;
 +
-         paramIn(cp, csprintf("%s.Entry%d", process->name(), i), "vaddr", vaddr);
+         paramIn(cp, csprintf("%s.Entry%d", name(), i), "vaddr", vaddr);
          entry = new TheISA::TlbEntry();
-         entry->unserialize(cp, csprintf("%s.Entry%d", process->name(), i));
+         entry->unserialize(cp, csprintf("%s.Entry%d", name(), i));
          pTable[vaddr] = *entry;
          ++i;
      }
Simple merge
index 82a54545f68212d8930cff9695eedba9f898386b,c8555cd3153dec5bf2f78f8e1b3190679b24fb02..3478310b1afa58b3354ede59686cc958aad3b3e4
@@@ -88,32 -94,28 +88,27 @@@ in
  connectPorts(SimObject *o1, const std::string &name1, int i1,
               SimObject *o2, const std::string &name2, int i2)
  {
-     MemObject *mo1, *mo2;
-     mo1 = dynamic_cast<MemObject*>(o1);
-     mo2 = dynamic_cast<MemObject*>(o2);
 -#if FULL_SYSTEM
 -    EtherObject *eo1, *eo2;
 -    EtherDevice *ed1, *ed2;
 -    eo1 = dynamic_cast<EtherObject*>(o1);
 -    ed1 = dynamic_cast<EtherDevice*>(o1);
--
 -    eo2 = dynamic_cast<EtherObject*>(o2);
 -    ed2 = dynamic_cast<EtherDevice*>(o2);
 +    if (FullSystem) {
 +        EtherObject *eo1, *eo2;
 +        EtherDevice *ed1, *ed2;
 +        eo1 = dynamic_cast<EtherObject*>(o1);
 +        ed1 = dynamic_cast<EtherDevice*>(o1);
 +        eo2 = dynamic_cast<EtherObject*>(o2);
 +        ed2 = dynamic_cast<EtherDevice*>(o2);
  
 -    if ((eo1 || ed1) && (eo2 || ed2)) {
 -        EtherInt *p1 = lookupEthPort(o1, name1, i1);
 -        EtherInt *p2 = lookupEthPort(o2, name2, i2);
 +        if ((eo1 || ed1) && (eo2 || ed2)) {
 +            EtherInt *p1 = lookupEthPort(o1, name1, i1);
 +            EtherInt *p2 = lookupEthPort(o2, name2, i2);
  
 -        if (p1 != NULL &&  p2 != NULL) {
 +            if (p1 != NULL &&  p2 != NULL) {
  
 -            p1->setPeer(p2);
 -            p2->setPeer(p1);
 +                p1->setPeer(p2);
 +                p2->setPeer(p1);
  
 -            return 1;
 +                return 1;
 +            }
          }
      }
 -#endif
      Port *p1 = lookupPort(o1, name1, i1);
      Port *p2 = lookupPort(o2, name2, i2);
  
Simple merge
Simple merge
Simple merge
Simple merge
index 654bcef80a77854332be9af7dad6f2cde7ee8050,c58830c10970082d101b2cf8ec3f725747314efa..3051cb64b5eed4cee140589bd8e8a2a5add9ef4d
@@@ -260,11 -273,12 +260,11 @@@ System::replaceThreadContext(ThreadCont
          remoteGDB[context_id]->replaceThreadContext(tc);
  }
  
 -#if !FULL_SYSTEM
  Addr
- System::new_page()
+ System::allocPhysPages(int npages)
  {
      Addr return_addr = pagePtr << LogVMPageSize;
-     ++pagePtr;
+     pagePtr += npages;
      if (return_addr >= physmem->size())
          fatal("Out of memory, please increase size of physical memory.");
      return return_addr;
index a8d336d03cb528971b946cb712ac514c7aac26de,ed5193dfd4b0fea5c78395ebb6552b4455eb68e8..00d8360e0832d3d813b22623bb7ba8cc461e7d6d
@@@ -271,8 -285,14 +271,10 @@@ class System : public SimObjec
       */
      Addr getKernelEntry() const { return kernelEntry; }
  
-     Addr new_page();
 -#else
 -
+     /// Allocate npages contiguous unused physical pages
+     /// @return Starting address of first page
+     Addr allocPhysPages(int npages);
  
 -#endif // FULL_SYSTEM
 -
      int registerThreadContext(ThreadContext *tc, int assigned=-1);
      void replaceThreadContext(ThreadContext *tc, int context_id);