/*
  * 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
 #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"
 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) &&
         }
         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());
 }