x86: Fix x87 state transfer bug
authorAndreas Sandberg <andreas@sandberg.pp.se>
Wed, 5 Feb 2014 13:08:13 +0000 (14:08 +0100)
committerAndreas Sandberg <andreas@sandberg.pp.se>
Wed, 5 Feb 2014 13:08:13 +0000 (14:08 +0100)
commite76a37985f9ab9678ed00809cc2ec8385c293ba5
tree5eb81a3d156c3a3db70782d17812868149c1bbfe
parentc6279f2d19cf3d8b625ffcd54b1d0183c1986fe1
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.
src/arch/x86/utility.cc