commit 1a428de189 introduced a bug by using a signed enum in a bitfield, the value of which is then used in a ldmxcsr instruction. The sign-extension corrupts the value, causing an exception by attempting to load mxcsr with an invalid value.

This commit is contained in:
Shawn Hoffman 2014-03-04 22:49:33 -08:00
parent 0c613a5f5b
commit 7733463e65
2 changed files with 4 additions and 3 deletions

View File

@ -8,14 +8,15 @@
namespace FPURoundMode
{
enum RoundModes
enum RoundModes : u32
{
ROUND_NEAR = 0,
ROUND_CHOP = 1,
ROUND_UP = 2,
ROUND_DOWN = 3
};
enum PrecisionModes {
enum PrecisionModes : u32
{
PREC_24 = 0,
PREC_53 = 1,
PREC_64 = 2

View File

@ -390,7 +390,7 @@ union UReg_FPSCR
struct
{
// Rounding mode (towards: nearest, zero, +inf, -inf)
enum FPURoundMode::RoundModes RN : 2;
FPURoundMode::RoundModes RN : 2;
// Non-IEEE mode enable (aka flush-to-zero)
u32 NI : 1;
// Inexact exception enable