changeset 9c754e3022b7 in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=9c754e3022b7
description:
        X86: implements copyRegs() function
        This patch implements the copyRegs() function for the x86 architecture.
        The patch assumes that no side effects other than TLB invalidation need
        to be considered while copying the registers. This may not hold true in
        future.

diffstat:

 src/arch/x86/utility.cc |  19 +++++++++++++------
 1 files changed, 13 insertions(+), 6 deletions(-)

diffs (57 lines):

diff -r 9f3fedee88e2 -r 9c754e3022b7 src/arch/x86/utility.cc
--- a/src/arch/x86/utility.cc   Mon Jul 11 04:47:06 2011 -0700
+++ b/src/arch/x86/utility.cc   Mon Jul 11 16:52:52 2011 -0500
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2007 The Hewlett-Packard Development Company
+ * Copyright (c) 2011 Advanced Micro Devices, Inc.
  * All rights reserved.
  *
  * The license below extends only to copyright in the software and shall
@@ -42,9 +43,8 @@
 #if FULL_SYSTEM
 #include "arch/x86/interrupts.hh"
 #endif
-#include "arch/x86/regs/int.hh"
-#include "arch/x86/regs/misc.hh"
-#include "arch/x86/regs/segment.hh"
+#include "arch/x86/registers.hh"
+#include "arch/x86/tlb.hh"
 #include "arch/x86/utility.hh"
 #include "arch/x86/x86_traits.hh"
 #include "cpu/base.hh"
@@ -214,7 +214,9 @@
 void
 copyMiscRegs(ThreadContext *src, ThreadContext *dest)
 {
-    warn("copyMiscRegs is naively implemented for x86\n");
+    // This function assumes no side effects other than TLB invalidation
+    // 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) &&
@@ -223,16 +225,21 @@
         }
         dest->setMiscRegNoEffect(i, src->readMiscRegNoEffect(i));
     }
+
+    dest->getITBPtr()->invalidateAll();
+    dest->getDTBPtr()->invalidateAll();
 }
 
 void
 copyRegs(ThreadContext *src, ThreadContext *dest)
 {
-    panic("copyRegs not implemented for x86!\n");
     //copy int regs
+    for (int i = 0; i < NumIntRegs; ++i)
+         dest->setIntReg(i, src->readIntReg(i));
     //copy float regs
+    for (int i = 0; i < NumFloatRegs; ++i)
+         dest->setFloatRegBits(i, src->readFloatRegBits(i));
     copyMiscRegs(src, dest);
-
     dest->pcState(src->pcState());
 }
 
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to