FPSCR: Mask away reserved bits (#34)

This commit is contained in:
Mat M 2016-09-21 12:51:13 -04:00 committed by Merry
parent 792f2bfd94
commit 65dcf45ca6

View file

@ -28,12 +28,12 @@ public:
FPSCR() = default; FPSCR() = default;
FPSCR(const FPSCR&) = default; FPSCR(const FPSCR&) = default;
FPSCR(FPSCR&&) = default; FPSCR(FPSCR&&) = default;
explicit FPSCR(u32 data) : value{data} {} explicit FPSCR(u32 data) : value{data & mask} {}
FPSCR& operator=(const FPSCR&) = default; FPSCR& operator=(const FPSCR&) = default;
FPSCR& operator=(FPSCR&&) = default; FPSCR& operator=(FPSCR&&) = default;
FPSCR& operator=(u32 data) { FPSCR& operator=(u32 data) {
value = data; value = data & mask;
return *this; return *this;
} }
@ -161,10 +161,10 @@ public:
* - All exception enable bits are cleared. * - All exception enable bits are cleared.
*/ */
bool InRunFastMode() const { bool InRunFastMode() const {
constexpr u32 mask = 0x03001F00; constexpr u32 runfast_mask = 0x03001F00;
constexpr u32 expected = 0x03000000; constexpr u32 expected = 0x03000000;
return (value & mask) == expected; return (value & runfast_mask) == expected;
} }
/// Gets the underlying raw value within the FPSCR. /// Gets the underlying raw value within the FPSCR.
@ -173,6 +173,8 @@ public:
} }
private: private:
// Bits 5-6, 13-14, and 19 are reserved.
static constexpr u32 mask = 0xFFF79F9F;
u32 value = 0; u32 value = 0;
}; };