mirror of
https://github.com/ptitSeb/box86.git
synced 2025-05-08 21:08:57 +08:00
[INTERPRETER] Fixed D9 F4 opcode ([DYNAREC] too) (backported from box64)
This commit is contained in:
parent
e754df0fb1
commit
20432122de
@ -62,10 +62,20 @@ void arm_fpatan(x86emu_t* emu)
|
||||
}
|
||||
void arm_fxtract(x86emu_t* emu)
|
||||
{
|
||||
int32_t tmp32s = (ST1.q&0x7ff0000000000000LL)>>52;
|
||||
tmp32s -= 1023;
|
||||
ST1.d /= exp2(tmp32s);
|
||||
ST0.d = tmp32s;
|
||||
int tmp32s;
|
||||
if(isnan(ST1.d)) {
|
||||
ST0.d = ST1.d;
|
||||
} else if(isinf(ST1.d)) {
|
||||
ST0.d = ST1.d;
|
||||
ST1.d = INFINITY;
|
||||
} else if(ST1.d==0.0) {
|
||||
ST0.d = ST1.d;
|
||||
ST1.d = -INFINITY;
|
||||
} else {
|
||||
// LD80bits doesn't have implicit "1" bit, so need to adjust for that
|
||||
ST0.d = frexp(ST1.d, &tmp32s)*2;
|
||||
ST1.d = tmp32s-1;
|
||||
}
|
||||
}
|
||||
void arm_fprem(x86emu_t* emu)
|
||||
{
|
||||
|
@ -144,9 +144,20 @@ uintptr_t RunD9(x86emu_t *emu, uintptr_t addr)
|
||||
emu->sw.f.F87_C1 = 0;
|
||||
break;
|
||||
case 0xF4: /* FXTRACT */
|
||||
ST0.d = frexp(ST0.d, &tmp32s);
|
||||
fpu_do_push(emu);
|
||||
ST0.d = tmp32s;
|
||||
if(isnan(ST1.d)) {
|
||||
ST0.d = ST1.d;
|
||||
} else if(isinf(ST1.d)) {
|
||||
ST0.d = ST1.d;
|
||||
ST1.d = INFINITY;
|
||||
} else if(ST1.d==0.0) {
|
||||
ST0.d = ST1.d;
|
||||
ST1.d = -INFINITY;
|
||||
} else {
|
||||
// LD80bits doesn't have implicit "1" bit, so need to adjust for that
|
||||
ST0.d = frexp(ST1.d, &tmp32s)*2;
|
||||
ST1.d = tmp32s-1;
|
||||
}
|
||||
// C1 set only if stack under/overflow occurs
|
||||
break;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user