X86: Use the HandyM5Reg to avoid a register read and some logic in the TLB.
authorGabe Black <gblack@eecs.umich.edu>
Tue, 29 May 2012 04:56:23 +0000 (21:56 -0700)
committerGabe Black <gblack@eecs.umich.edu>
Tue, 29 May 2012 04:56:23 +0000 (21:56 -0700)
src/arch/x86/tlb.cc

index eb6e9c530baa2edfef86f52dd013fd9769697b44..4923752efa8529de14a2488be990b90c108bc399 100644 (file)
@@ -269,15 +269,10 @@ TLB::translate(RequestPtr req, ThreadContext *tc, Translation *translation,
             }
             Addr base = tc->readMiscRegNoEffect(MISCREG_SEG_BASE(seg));
             Addr limit = tc->readMiscRegNoEffect(MISCREG_SEG_LIMIT(seg));
-            // This assumes we're not in 64 bit mode. If we were, the default
-            // address size is 64 bits, overridable to 32.
-            int size = 32;
             bool sizeOverride = (flags & (AddrSizeFlagBit << FlagShift));
-            SegAttr csAttr = tc->readMiscRegNoEffect(MISCREG_CS_ATTR);
-            if ((csAttr.defaultSize && sizeOverride) ||
-                    (!csAttr.defaultSize && !sizeOverride))
-                size = 16;
-            Addr offset = bits(vaddr - base, size-1, 0);
+            int logSize = sizeOverride ? m5Reg.altAddr : m5Reg.defAddr;
+            int size = (1 << logSize) * 8;
+            Addr offset = bits(vaddr - base, size - 1, 0);
             Addr endOffset = offset + req->getSize() - 1;
             if (expandDown) {
                 DPRINTF(TLB, "Checking an expand down segment.\n");