X86: Truncate descriptors to 16 bits.
authorGabe Black <gblack@eecs.umich.edu>
Thu, 12 Jun 2008 04:49:16 +0000 (00:49 -0400)
committerGabe Black <gblack@eecs.umich.edu>
Thu, 12 Jun 2008 04:49:16 +0000 (00:49 -0400)
src/arch/x86/isa/microops/regop.isa

index 03a7515ed7cba52e2994d249abbfeba1e3933cf2..35f1fef025f3d87a0fdace1f4ffed4c75d537d18 100644 (file)
@@ -988,20 +988,20 @@ let {{
 
     class Chks(SegOp):
         code = '''
-            // The selector is in source 1.
+            // The selector is in source 1 and can be at most 16 bits.
             SegSelector selector = psrc1;
 
             // Compute the address of the descriptor and set DestReg to it.
             if (selector.ti) {
                 // A descriptor in the LDT
-                Addr target = (selector.esi << 3) + LDTRBase;
-                if (!LDTRSel || (selector.esi << 3) + dataSize > LDTRLimit)
+                Addr target = (selector.si << 3) + LDTRBase;
+                if (!LDTRSel || (selector.si << 3) + dataSize > LDTRLimit)
                     fault = new GeneralProtection(selector & mask(16));
                 DestReg = target;
             } else {
                 // A descriptor in the GDT
-                Addr target = (selector.esi << 3) + GDTRBase;
-                if ((selector.esi << 3) + dataSize > GDTRLimit)
+                Addr target = (selector.si << 3) + GDTRBase;
+                if ((selector.si << 3) + dataSize > GDTRLimit)
                     fault = new GeneralProtection(selector & mask(16));
                 DestReg = target;
             }
@@ -1009,7 +1009,7 @@ let {{
         flag_code = '''
             // Check for a NULL selector and set ZF,EZF appropriately.
             ccFlagBits = ccFlagBits & ~(ext & (ZFBit | EZFBit));
-            if (!selector.esi && !selector.ti)
+            if (!selector.si && !selector.ti)
                 ccFlagBits = ccFlagBits | (ext & (ZFBit | EZFBit));
         '''