1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 23:58:11 +00:00

UserspaceEmulator: Always set C1 when rounding

This commit is contained in:
Hendiadyoin1 2021-07-23 00:41:34 +02:00 committed by Linus Groh
parent 7214b08f81
commit fa02b46295

View file

@ -197,13 +197,12 @@ template<Arithmetic T>
ALWAYS_INLINE T SoftFPU::fpu_round_checked(long double value)
{
T result = fpu_round<T>(value);
if (auto rnd = value - result) {
if (rnd > 0)
set_c1(1);
else
set_c1(0);
if (result != value)
fpu_set_exception(FPU_Exception::Precision);
}
if (result > value)
set_c1(1);
else
set_c1(0);
return result;
}
@ -791,13 +790,7 @@ void SoftFPU::FCHS(const X86::Instruction&)
void SoftFPU::FRNDINT(const X86::Instruction&)
{
auto res = fpu_round<long double>(fpu_get(0));
if (auto rnd = (res - fpu_get(0))) {
if (rnd > 0)
set_c1(1);
else
set_c1(0);
}
auto res = fpu_round_checked<long double>(fpu_get(0));
fpu_set(0, res);
}