changeset 32784c63de81 in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=32784c63de81
description:
        x86: Fix x87 state transfer bug

        Changeset 7274310be1bb (isa: clean up register constants) increased
        the value of NumFloatRegs, which triggered a bug in
        X86ISA::copyRegs(). This bug is caused by the x87 stack being copied
        twice since register indexes past NUM_FLOATREGS are mapped into the
        x87 stack relative to the top of the stack, which is undefined when
        the copy takes place.

        This changeset updates the copyRegs() function to use access registers
        using the non-flattening interface, which guarantees that undesirable
        register folding does not happen.

diffstat:

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

diffs (20 lines):

diff -r 09507a45c701 -r 32784c63de81 src/arch/x86/utility.cc
--- a/src/arch/x86/utility.cc   Sun Feb 02 16:37:35 2014 +0100
+++ b/src/arch/x86/utility.cc   Wed Feb 05 14:08:13 2014 +0100
@@ -240,13 +240,13 @@
 {
     //copy int regs
     for (int i = 0; i < NumIntRegs; ++i)
-         dest->setIntReg(i, src->readIntReg(i));
+         dest->setIntRegFlat(i, src->readIntRegFlat(i));
     //copy float regs
     for (int i = 0; i < NumFloatRegs; ++i)
-         dest->setFloatRegBits(i, src->readFloatRegBits(i));
+         dest->setFloatRegBitsFlat(i, src->readFloatRegBitsFlat(i));
     //copy condition-code regs
     for (int i = 0; i < NumCCRegs; ++i)
-         dest->setCCReg(i, src->readCCReg(i));
+         dest->setCCRegFlat(i, src->readCCRegFlat(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