mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-22 05:40:01 -06:00
JitArm64: Use LSL+CLS for classifying floats
This is a little trick I came up with that lets us restructure our float classification code so we can exit earlier when the float is normal, which is the case more often than not. First we shift left by 1 to get rid of the sign bit, and then we count the number of leading sign bits. If the result is less than 10 (for doubles) or 7 (for floats), the float is normal. This is because, if the float isn't normal, the exponent is either all zeroes or all ones.
This commit is contained in:
@ -23,11 +23,15 @@ static constexpr u64 DOUBLE_SIGN = 0x8000000000000000ULL;
|
||||
static constexpr u64 DOUBLE_EXP = 0x7FF0000000000000ULL;
|
||||
static constexpr u64 DOUBLE_FRAC = 0x000FFFFFFFFFFFFFULL;
|
||||
static constexpr u64 DOUBLE_ZERO = 0x0000000000000000ULL;
|
||||
static constexpr int DOUBLE_EXP_WIDTH = 11;
|
||||
static constexpr int DOUBLE_FRAC_WIDTH = 52;
|
||||
|
||||
static constexpr u32 FLOAT_SIGN = 0x80000000;
|
||||
static constexpr u32 FLOAT_EXP = 0x7F800000;
|
||||
static constexpr u32 FLOAT_FRAC = 0x007FFFFF;
|
||||
static constexpr u32 FLOAT_ZERO = 0x00000000;
|
||||
static constexpr int FLOAT_EXP_WIDTH = 8;
|
||||
static constexpr int FLOAT_FRAC_WIDTH = 23;
|
||||
|
||||
inline bool IsQNAN(double d)
|
||||
{
|
||||
|
Reference in New Issue
Block a user