Interpreter_FPUtils: Use Common::BitCast where applicable

Gets rid of now-unnecessary memcpy boilerplating for different bit
representations between integral and fp types.
This commit is contained in:
Lioncash 2018-05-16 17:44:45 -04:00
parent b547f72878
commit c7cd1424f4
1 changed files with 5 additions and 15 deletions

View File

@ -5,9 +5,9 @@
#pragma once #pragma once
#include <cmath> #include <cmath>
#include <cstring>
#include <limits> #include <limits>
#include "Common/BitUtils.h"
#include "Common/CPUDetect.h" #include "Common/CPUDetect.h"
#include "Common/CommonTypes.h" #include "Common/CommonTypes.h"
#include "Common/FloatUtils.h" #include "Common/FloatUtils.h"
@ -73,28 +73,18 @@ inline double ForceDouble(double d)
inline double Force25Bit(double d) inline double Force25Bit(double d)
{ {
u64 integral; u64 integral = Common::BitCast<u64>(d);
std::memcpy(&integral, &d, sizeof(u64));
integral = (integral & 0xFFFFFFFFF8000000ULL) + (integral & 0x8000000); integral = (integral & 0xFFFFFFFFF8000000ULL) + (integral & 0x8000000);
double result; return Common::BitCast<double>(integral);
std::memcpy(&result, &integral, sizeof(double));
return result;
} }
inline double MakeQuiet(double d) inline double MakeQuiet(double d)
{ {
u64 integral; const u64 integral = Common::BitCast<u64>(d) | Common::DOUBLE_QBIT;
std::memcpy(&integral, &d, sizeof(u64));
integral |= Common::DOUBLE_QBIT; return Common::BitCast<double>(integral);
double result;
std::memcpy(&result, &integral, sizeof(double));
return result;
} }
// these functions allow globally modify operations behaviour // these functions allow globally modify operations behaviour