x86: create function to check miscreg validity
authorSteve Reinhardt <steve.reinhardt@amd.com>
Sun, 7 Feb 2016 01:21:20 +0000 (17:21 -0800)
committerSteve Reinhardt <steve.reinhardt@amd.com>
Sun, 7 Feb 2016 01:21:20 +0000 (17:21 -0800)
In the process of trying to get rid of an '== false' comparison,
it became apparent that a slightly more involved solution was
needed.  Split this out into its own changeset since it's not
a totally trivial local change like the others.

src/arch/x86/isa.cc
src/arch/x86/regs/misc.hh
src/arch/x86/utility.cc

index 213a9e2e3fc25a6313ddd517aa1982ad32bac5a7..ad7248841cdfa24cb15fff1c467d02aec1f27b8d 100644 (file)
@@ -129,13 +129,7 @@ ISA::readMiscRegNoEffect(int miscReg) const
     // Make sure we're not dealing with an illegal control register.
     // Instructions should filter out these indexes, and nothing else should
     // attempt to read them directly.
-    assert(miscReg >= MISCREG_CR0 &&
-           miscReg < NUM_MISCREGS &&
-           miscReg != MISCREG_CR1 &&
-           !(miscReg > MISCREG_CR4 &&
-             miscReg < MISCREG_CR8) &&
-           !(miscReg > MISCREG_CR8 &&
-             miscReg <= MISCREG_CR15));
+    assert(isValidMiscReg(miscReg));
 
     return regVal[miscReg];
 }
@@ -162,13 +156,7 @@ ISA::setMiscRegNoEffect(int miscReg, MiscReg val)
     // Make sure we're not dealing with an illegal control register.
     // Instructions should filter out these indexes, and nothing else should
     // attempt to write to them directly.
-    assert(miscReg >= MISCREG_CR0 &&
-           miscReg < NUM_MISCREGS &&
-           miscReg != MISCREG_CR1 &&
-           !(miscReg > MISCREG_CR4 &&
-             miscReg < MISCREG_CR8) &&
-           !(miscReg > MISCREG_CR8 &&
-             miscReg <= MISCREG_CR15));
+    assert(isValidMiscReg(miscReg));
 
     HandyM5Reg m5Reg = readMiscRegNoEffect(MISCREG_M5_REG);
     switch (miscReg) {
index 77f4e1bcd21ef8569e78f16df8610776ced694f3..48f7d974dbba42ff62714c83aa48d577cc342add 100644 (file)
@@ -101,7 +101,7 @@ namespace X86ISA
     enum MiscRegIndex
     {
         // Control registers
-        // Most of these are invalid.
+        // Most of these are invalid.  See isValidMiscReg() below.
         MISCREG_CR_BASE,
         MISCREG_CR0 = MISCREG_CR_BASE,
         MISCREG_CR1,
@@ -399,6 +399,15 @@ namespace X86ISA
         NUM_MISCREGS
     };
 
+    static inline bool
+    isValidMiscReg(int index)
+    {
+        return (index >= MISCREG_CR0 && index < NUM_MISCREGS &&
+                index != MISCREG_CR1 &&
+                !(index > MISCREG_CR4 && index < MISCREG_CR8) &&
+                !(index > MISCREG_CR8 && index <= MISCREG_CR15));
+    }
+
     static inline MiscRegIndex
     MISCREG_CR(int index)
     {
index cf6d2d910482b0d10ed003ffda197898e9b97759..cf30723487bb03eefb3b49f047e405b02b054ae2 100644 (file)
@@ -217,11 +217,9 @@ copyMiscRegs(ThreadContext *src, ThreadContext *dest)
     // need to be considered while copying state. That will likely not be
     // true in the future.
     for (int i = 0; i < NUM_MISCREGS; ++i) {
-        if ( ( i != MISCREG_CR1 &&
-             !(i > MISCREG_CR4 && i < MISCREG_CR8) &&
-             !(i > MISCREG_CR8 && i <= MISCREG_CR15) ) == false) {
+        if (!isValidMiscReg(i))
              continue;
-        }
+
         dest->setMiscRegNoEffect(i, src->readMiscRegNoEffect(i));
     }