X86: Hide the irrelevant portions of the address components for load and store microops.
authorGabe Black <gblack@eecs.umich.edu>
Wed, 1 Aug 2007 21:34:59 +0000 (14:34 -0700)
committerGabe Black <gblack@eecs.umich.edu>
Wed, 1 Aug 2007 21:34:59 +0000 (14:34 -0700)
--HG--
extra : convert_revision : a5ac6fefa09882f0833537e23f1ac0477bc89bb9

src/arch/x86/insts/microldstop.cc

index 9628256e44d6b1a965f6fedc17a73dcfe4d1a4c1..9638a2ae374d88cac4988f955a74d2854338ed26 100644 (file)
@@ -64,16 +64,40 @@ namespace X86ISA
             const SymbolTable *symtab) const
     {
         std::stringstream response;
+        bool someAddr = false;
 
         printMnemonic(response, instMnem, mnemonic);
-        printDestReg(response, 0, dataSize);
+        if(flags[IsLoad])
+            printDestReg(response, 0, dataSize);
+        else
+            printSrcReg(response, 2, dataSize);
         response << ", ";
         printSegment(response, segment);
-        ccprintf(response, ":[%d*", scale);
-        printSrcReg(response, 0, addressSize);
-        response << " + ";
-        printSrcReg(response, 1, addressSize);
-        ccprintf(response, " + %#x]", disp);
+        response << ":[";
+        if(scale != 0 && _srcRegIdx[0] != ZeroReg)
+        {
+            if(scale != 1)
+                ccprintf(response, "%d*", scale);
+            printSrcReg(response, 0, addressSize);
+            someAddr = true;
+        }
+        if(_srcRegIdx[1] != ZeroReg)
+        {
+            if(someAddr)
+                response << " + ";
+            printSrcReg(response, 1, addressSize);
+            someAddr = true;
+        }
+        if(disp != 0)
+        {
+            if(someAddr)
+                response << " + ";
+            ccprintf(response, "%#x", disp);
+            someAddr = true;
+        }
+        if(!someAddr)
+            response << "0";
+        response << "]";
         return response.str();
     }
 }