X86: Make disassembly use the final register index. Add bits to indicate whether...
authorGabe Black <gblack@eecs.umich.edu>
Mon, 30 Jul 2007 20:23:33 +0000 (13:23 -0700)
committerGabe Black <gblack@eecs.umich.edu>
Mon, 30 Jul 2007 20:23:33 +0000 (13:23 -0700)
--HG--
extra : convert_revision : 4b46e71ca91e480f6e1662b7f37b75240d6598e9

src/arch/x86/insts/microldstop.cc
src/arch/x86/insts/microldstop.hh
src/arch/x86/insts/microregop.cc
src/arch/x86/insts/microregop.hh
src/arch/x86/isa/microops/limmop.isa

index 8a52ad93250e13488b2c896caf57fae3af5ffbf6..9628256e44d6b1a965f6fedc17a73dcfe4d1a4c1 100644 (file)
@@ -66,13 +66,13 @@ namespace X86ISA
         std::stringstream response;
 
         printMnemonic(response, instMnem, mnemonic);
-        printReg(response, data, dataSize);
+        printDestReg(response, 0, dataSize);
         response << ", ";
         printSegment(response, segment);
         ccprintf(response, ":[%d*", scale);
-        printReg(response, index, addressSize);
+        printSrcReg(response, 0, addressSize);
         response << " + ";
-        printReg(response, base, addressSize);
+        printSrcReg(response, 1, addressSize);
         ccprintf(response, " + %#x]", disp);
         return response.str();
     }
index ae03d176e99c8002f7a87d5941e964c3087213c6..8fef141214bf71501ca901e6230a367eab29c72e 100644 (file)
@@ -76,6 +76,7 @@ namespace X86ISA
         const RegIndex data;
         const uint8_t dataSize;
         const uint8_t addressSize;
+        RegIndex foldOBit, foldABit;
 
         //Constructor
         LdStOp(ExtMachInst _machInst,
@@ -92,7 +93,11 @@ namespace X86ISA
                 disp(_disp), segment(_segment),
                 data(_data),
                 dataSize(_dataSize), addressSize(_addressSize)
-        {}
+        {
+            foldOBit = (dataSize == 1 && !_machInst.rex.present) ? 1 << 6 : 0;
+            foldABit =
+                (addressSize == 1 && !_machInst.rex.present) ? 1 << 6 : 0;
+        }
 
         std::string generateDisassembly(Addr pc,
             const SymbolTable *symtab) const;
index 976b04688f599dbcde67d2195d8bf7c369e59690..e67a82d4ff28e5cf56abb437df9579c3f5bc52ad 100644 (file)
@@ -173,11 +173,11 @@ namespace X86ISA
         std::stringstream response;
 
         printMnemonic(response, instMnem, mnemonic);
-        printReg(response, dest, dataSize);
+        printDestReg(response, 0, dataSize);
         response << ", ";
-        printReg(response, src1, dataSize);
+        printSrcReg(response, 0, dataSize);
         response << ", ";
-        printReg(response, src2, dataSize);
+        printSrcReg(response, 1, dataSize);
         return response.str();
     }
 
@@ -187,9 +187,9 @@ namespace X86ISA
         std::stringstream response;
 
         printMnemonic(response, instMnem, mnemonic);
-        printReg(response, dest, dataSize);
+        printDestReg(response, 0, dataSize);
         response << ", ";
-        printReg(response, src1, dataSize);
+        printSrcReg(response, 0, dataSize);
         ccprintf(response, ", %#x", imm8);
         return response.str();
     }
index f411c07751362adeb1845fde8d89844a2342725a..f465ac6518c7d1ce6eb310204e9b851f24e6ea8f 100644 (file)
@@ -113,6 +113,7 @@ namespace X86ISA
         const RegIndex dest;
         const uint8_t dataSize;
         const uint16_t ext;
+        RegIndex foldOBit;
 
         // Constructor
         RegOpBase(ExtMachInst _machInst,
@@ -128,6 +129,7 @@ namespace X86ISA
             src1(_src1), dest(_dest),
             dataSize(_dataSize), ext(_ext)
         {
+            foldOBit = (dataSize == 1 && !_machInst.rex.present) ? 1 << 6 : 0;
         }
 
         //Figure out what the condition code flags should be.
index ec68c36dcf8786d942bf0434db3cbec3e199141a..c357c1d6c8809da3cd3436eb35023f67cb2b8203 100644 (file)
@@ -78,6 +78,7 @@ def template MicroLimmOpDeclare {{
         const RegIndex dest;
         const uint64_t imm;
         const uint8_t dataSize;
+        RegIndex foldOBit;
         void buildMe();
 
         std::string generateDisassembly(Addr pc,
@@ -104,7 +105,7 @@ def template MicroLimmOpDisassembly {{
         std::stringstream response;
 
         printMnemonic(response, instMnem, mnemonic);
-        printReg(response, dest, dataSize);
+        printDestReg(response, 0, dataSize);
         response << ", ";
         ccprintf(response, "%#x", imm);
         return response.str();
@@ -115,6 +116,7 @@ def template MicroLimmOpConstructor {{
 
     inline void %(class_name)s::buildMe()
     {
+        foldOBit = (dataSize == 1 && !machInst.rex.present) ? 1 << 6 : 0;
         %(constructor)s;
     }