mirror of https://github.com/xemu-project/xemu.git
target/m68k: fix FPSR quotient byte for fmod instruction
The FPSR quotient byte should be set to the value of the quotient and not the result. Switch from using floatx80_mod() to floatx80_modrem() which returns the quotient as a uint64_t which can be used for the quotient byte. Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> Reviewed-by: Laurent Vivier <laurent@vivier.eu> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-Id: <20230114232959.118224-4-mark.cave-ayland@ilande.co.uk> Signed-off-by: Laurent Vivier <laurent@vivier.eu>
This commit is contained in:
parent
60b598df6e
commit
ad6dae3b33
|
@ -523,17 +523,16 @@ static void make_quotient(CPUM68KState *env, int sign, uint32_t quotient)
|
||||||
|
|
||||||
void HELPER(fmod)(CPUM68KState *env, FPReg *res, FPReg *val0, FPReg *val1)
|
void HELPER(fmod)(CPUM68KState *env, FPReg *res, FPReg *val0, FPReg *val1)
|
||||||
{
|
{
|
||||||
uint32_t quotient;
|
uint64_t quotient;
|
||||||
int sign;
|
int sign = extractFloatx80Sign(val1->d) ^ extractFloatx80Sign(val0->d);
|
||||||
|
|
||||||
res->d = floatx80_mod(val1->d, val0->d, &env->fp_status);
|
res->d = floatx80_modrem(val1->d, val0->d, true, "ient,
|
||||||
|
&env->fp_status);
|
||||||
|
|
||||||
if (floatx80_is_any_nan(res->d)) {
|
if (floatx80_is_any_nan(res->d)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
sign = extractFloatx80Sign(res->d);
|
|
||||||
quotient = floatx80_to_int32(floatx80_abs(res->d), &env->fp_status);
|
|
||||||
make_quotient(env, sign, quotient);
|
make_quotient(env, sign, quotient);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue