X86: Compute PCI config addresses correctly.
[gem5.git] / src / arch / x86 / insts / static_inst.cc
index 15fc4bee635d4d19922bd44ad38e48aeeedec375..f4ed446036a8f3032d6ae171cfc62c11288c66a6 100644 (file)
@@ -240,6 +240,44 @@ namespace X86ISA
         }
     }
 
+    void X86StaticInst::printMem(std::ostream &os, uint8_t segment,
+            uint8_t scale, RegIndex index, RegIndex base,
+            uint64_t disp, uint8_t addressSize, bool rip) const
+    {
+        bool someAddr = false;
+        printSegment(os, segment);
+        os << ":[";
+        if (rip) {
+            os << "rip";
+            someAddr = true;
+        } else {
+            if (scale != 0 && index != ZeroReg)
+            {
+                if(scale != 1)
+                    ccprintf(os, "%d*", scale);
+                printReg(os, index, addressSize);
+                someAddr = true;
+            }
+            if (base != ZeroReg)
+            {
+                if(someAddr)
+                    os << " + ";
+                printReg(os, base, addressSize);
+                someAddr = true;
+            }
+        }
+        if (disp != 0)
+        {
+            if(someAddr)
+                os << " + ";
+            ccprintf(os, "%#x", disp);
+            someAddr = true;
+        }
+        if (!someAddr)
+            os << "0";
+        os << "]";
+    }
+
     std::string X86StaticInst::generateDisassembly(Addr pc,
         const SymbolTable *symtab) const
     {