arch-arm: Add initial support for SVE contiguous loads/stores
[gem5.git] / src / arch / sparc / vtophys.cc
index f23fb83041510f84cff95aa36c50f5e06df3e61b..88f1c4acebbbe256b8048c0d708486ae25580204 100644 (file)
  * Authors: Ali Saidi
  */
 
+#include "arch/sparc/vtophys.hh"
+
 #include <string>
 
-#include "arch/sparc/vtophys.hh"
 #include "arch/sparc/tlb.hh"
-#include "base/compiler.hh"
 #include "base/chunk_generator.hh"
+#include "base/compiler.hh"
 #include "base/trace.hh"
 #include "cpu/thread_context.hh"
-#include "mem/vport.hh"
+#include "debug/VtoPhys.hh"
+#include "mem/port_proxy.hh"
 
 using namespace std;
 
@@ -71,18 +73,18 @@ vtophys(ThreadContext *tc, Addr addr)
     uint64_t tlbdata = tc->readMiscRegNoEffect(MISCREG_TLB_DATA);
 
     bool hpriv = bits(tlbdata,0,0);
-    //bool priv = bits(tlbdata,2,2);
+    // bool priv = bits(tlbdata,2,2);
     bool addr_mask = bits(tlbdata,3,3);
     bool data_real = !bits(tlbdata,5,5);
     bool inst_real = !bits(tlbdata,4,4);
     bool ctx_zero  = bits(tlbdata,18,16) > 0;
     int part_id = bits(tlbdata,15,8);
     int pri_context = bits(tlbdata,47,32);
-    //int sec_context = bits(tlbdata,63,48);
+    // int sec_context = bits(tlbdata,63,48);
 
-    FunctionalPort *mem = tc->getPhysPort();
-    ITB* itb = tc->getITBPtr();
-    DTB* dtb = tc->getDTBPtr();
+    PortProxy &mem = tc->getPhysProxy();
+    TLB* itb = dynamic_cast<TLB *>(tc->getITBPtr());
+    TLB* dtb = dynamic_cast<TLB *>(tc->getDTBPtr());
     TlbEntry* tbe;
     PageTableEntry pte;
     Addr tsbs[4];
@@ -109,9 +111,9 @@ vtophys(ThreadContext *tc, Addr addr)
     dtb->GetTsbPtr(tc, addr, ctx_zero ? 0 : pri_context, tsbs);
     va_tag = bits(addr, 63, 22);
     for (int x = 0; x < 4; x++) {
-        ttetag = betoh(mem->read<uint64_t>(tsbs[x]));
+        ttetag = betoh(mem.read<uint64_t>(tsbs[x]));
         if (ttetag.valid() && ttetag.va() == va_tag) {
-            uint64_t entry = mem->read<uint64_t>(tsbs[x]) + sizeof(uint64_t);
+            uint64_t entry = mem.read<uint64_t>(tsbs[x]) + sizeof(uint64_t);
             // I think it's sun4v at least!
             pte.populate(betoh(entry), PageTableEntry::sun4v);
             DPRINTF(VtoPhys, "Virtual(%#x)->Physical(%#x) found in TTE\n",
@@ -129,4 +131,4 @@ vtophys(ThreadContext *tc, Addr addr)
     return pte.translate(addr);
 }
 
-} /* namespace SparcISA */
+} // namespace SparcISA