diff options
| author | Yang Liu <liuyang22@iscas.ac.cn> | 2024-10-29 21:11:13 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-10-29 14:11:13 +0100 |
| commit | 8807b1aa3c62bbb8b773135b59244e1c451add02 (patch) | |
| tree | 71239becf7974d0cb56ffb91a3f1b510ffe5b7f4 /src | |
| parent | 2aff4239ccb0b6a50fa3aa84a011b293f0b85822 (diff) | |
| download | box64-8807b1aa3c62bbb8b773135b59244e1c451add02.tar.gz box64-8807b1aa3c62bbb8b773135b59244e1c451add02.zip | |
[INTERP] Fixed overflow checking for convertion opcodes (#1976)
Diffstat (limited to 'src')
| -rw-r--r-- | src/emu/x64run660f.c | 4 | ||||
| -rw-r--r-- | src/emu/x64runavx660f.c | 8 | ||||
| -rw-r--r-- | src/emu/x64runavxf20f.c | 8 | ||||
| -rw-r--r-- | src/emu/x64runavxf30f.c | 6 | ||||
| -rw-r--r-- | src/emu/x64runf20f.c | 8 | ||||
| -rw-r--r-- | src/emu/x64runf30f.c | 6 |
6 files changed, 20 insertions, 20 deletions
diff --git a/src/emu/x64run660f.c b/src/emu/x64run660f.c index cc7ef8a2..46ff4d6e 100644 --- a/src/emu/x64run660f.c +++ b/src/emu/x64run660f.c @@ -2389,11 +2389,11 @@ uintptr_t Run660F(x64emu_t *emu, rex_t rex, uintptr_t addr) nextop = F8; GETEX(0); GETGX; - if(isnan(EX->d[0]) || isinf(EX->d[0]) || EX->d[0]>0x7fffffff) + if(isnan(EX->d[0]) || isinf(EX->d[0]) || EX->d[0]>(double)0x7fffffff) GX->sd[0] = 0x80000000; else GX->sd[0] = EX->d[0]; - if(isnan(EX->d[1]) || isinf(EX->d[1]) || EX->d[1]>0x7fffffff) + if(isnan(EX->d[1]) || isinf(EX->d[1]) || EX->d[1]>(double)0x7fffffff) GX->sd[1] = 0x80000000; else GX->sd[1] = EX->d[1]; diff --git a/src/emu/x64runavx660f.c b/src/emu/x64runavx660f.c index 071547eb..e0212dd3 100644 --- a/src/emu/x64runavx660f.c +++ b/src/emu/x64runavx660f.c @@ -1714,21 +1714,21 @@ uintptr_t RunAVX_660F(x64emu_t *emu, vex_t vex, uintptr_t addr, int *step) GETEX(0); GETGX; GETGY; - if(isnan(EX->d[0]) || isinf(EX->d[0]) || EX->d[0]>0x7fffffff) + if(isnan(EX->d[0]) || isinf(EX->d[0]) || EX->d[0]>(double)0x7fffffff) GX->sd[0] = 0x80000000; else GX->sd[0] = EX->d[0]; - if(isnan(EX->d[1]) || isinf(EX->d[1]) || EX->d[1]>0x7fffffff) + if(isnan(EX->d[1]) || isinf(EX->d[1]) || EX->d[1]>(double)0x7fffffff) GX->sd[1] = 0x80000000; else GX->sd[1] = EX->d[1]; if(vex.l) { GETEY; - if(isnan(EY->d[0]) || isinf(EY->d[0]) || EY->d[0]>0x7fffffff) + if(isnan(EY->d[0]) || isinf(EY->d[0]) || EY->d[0]>(double)0x7fffffff) GX->sd[2] = 0x80000000; else GX->sd[2] = EY->d[0]; - if(isnan(EY->d[1]) || isinf(EY->d[1]) || EY->d[1]>0x7fffffff) + if(isnan(EY->d[1]) || isinf(EY->d[1]) || EY->d[1]>(double)0x7fffffff) GX->sd[3] = 0x80000000; else GX->sd[3] = EY->d[1]; diff --git a/src/emu/x64runavxf20f.c b/src/emu/x64runavxf20f.c index 46011f6f..37bc57f6 100644 --- a/src/emu/x64runavxf20f.c +++ b/src/emu/x64runavxf20f.c @@ -119,12 +119,12 @@ uintptr_t RunAVX_F20F(x64emu_t *emu, vex_t vex, uintptr_t addr, int *step) GETEX(0); GETGD; if(rex.w) - if(isnan(EX->d[0]) || isinf(EX->d[0]) || EX->d[0]>(double)0x7fffffffffffffffLL) + if(isnan(EX->d[0]) || isinf(EX->d[0]) || EX->d[0]>=(double)0x7fffffffffffffffLL) GD->q[0] = 0x8000000000000000LL; else GD->sq[0] = EX->d[0]; else { - if(isnan(EX->d[0]) || isinf(EX->d[0]) || EX->d[0]>0x7fffffff) + if(isnan(EX->d[0]) || isinf(EX->d[0]) || EX->d[0]>(double)0x7fffffff) GD->dword[0] = 0x80000000; else GD->sdword[0] = EX->d[0]; @@ -136,7 +136,7 @@ uintptr_t RunAVX_F20F(x64emu_t *emu, vex_t vex, uintptr_t addr, int *step) GETEX(0); GETGD; if(rex.w) { - if(isnan(EX->d[0]) || isinf(EX->d[0]) || EX->d[0]>(double)0x7fffffffffffffffLL) + if(isnan(EX->d[0]) || isinf(EX->d[0]) || EX->d[0]>=(double)0x7fffffffffffffffLL) GD->q[0] = 0x8000000000000000LL; else switch(emu->mxcsr.f.MXCSR_RC) { @@ -158,7 +158,7 @@ uintptr_t RunAVX_F20F(x64emu_t *emu, vex_t vex, uintptr_t addr, int *step) break; } } else { - if(isnan(EX->d[0]) || isinf(EX->d[0]) || EX->d[0]>0x7fffffff) + if(isnan(EX->d[0]) || isinf(EX->d[0]) || EX->d[0]>(double)0x7fffffff) GD->dword[0] = 0x80000000; else switch(emu->mxcsr.f.MXCSR_RC) { diff --git a/src/emu/x64runavxf30f.c b/src/emu/x64runavxf30f.c index cd70388a..d712b105 100644 --- a/src/emu/x64runavxf30f.c +++ b/src/emu/x64runavxf30f.c @@ -142,12 +142,12 @@ uintptr_t RunAVX_F30F(x64emu_t *emu, vex_t vex, uintptr_t addr, int *step) GETEX(0); GETGD; if (rex.w) { - if(isnanf(EX->f[0]) || isinff(EX->f[0]) || EX->f[0]>(float)0x7fffffffffffffffLL) + if(isnanf(EX->f[0]) || isinff(EX->f[0]) || EX->f[0]>=(float)0x7fffffffffffffffLL) GD->q[0] = 0x8000000000000000LL; else GD->sq[0] = EX->f[0]; } else { - if(isnanf(EX->f[0]) || isinff(EX->f[0]) || EX->f[0]>(float)0x7fffffff) + if(isnanf(EX->f[0]) || isinff(EX->f[0]) || EX->f[0]>=(float)0x7fffffff) GD->dword[0] = 0x80000000; else GD->sdword[0] = EX->f[0]; @@ -159,7 +159,7 @@ uintptr_t RunAVX_F30F(x64emu_t *emu, vex_t vex, uintptr_t addr, int *step) GETEX(0); GETGD; if(rex.w) { - if(isnanf(EX->f[0]) || isinff(EX->f[0]) || EX->f[0]>(float)0x7fffffffffffffffLL) + if(isnanf(EX->f[0]) || isinff(EX->f[0]) || EX->f[0]>=(float)0x7fffffffffffffffLL) GD->q[0] = 0x8000000000000000LL; else switch(emu->mxcsr.f.MXCSR_RC) { diff --git a/src/emu/x64runf20f.c b/src/emu/x64runf20f.c index b8d0b265..5b28888f 100644 --- a/src/emu/x64runf20f.c +++ b/src/emu/x64runf20f.c @@ -93,12 +93,12 @@ uintptr_t RunF20F(x64emu_t *emu, rex_t rex, uintptr_t addr, int *step) _GETEX(0); GETGD; if(rex.w) - if(isnan(EX->d[0]) || isinf(EX->d[0]) || EX->d[0]>(double)0x7fffffffffffffffLL) + if(isnan(EX->d[0]) || isinf(EX->d[0]) || EX->d[0]>=(double)0x7fffffffffffffffLL) GD->q[0] = 0x8000000000000000LL; else GD->sq[0] = EX->d[0]; else { - if(isnan(EX->d[0]) || isinf(EX->d[0]) || EX->d[0]>0x7fffffff) + if(isnan(EX->d[0]) || isinf(EX->d[0]) || EX->d[0]>(double)0x7fffffff) GD->dword[0] = 0x80000000; else GD->sdword[0] = EX->d[0]; @@ -110,7 +110,7 @@ uintptr_t RunF20F(x64emu_t *emu, rex_t rex, uintptr_t addr, int *step) _GETEX(0); GETGD; if(rex.w) { - if(isnan(EX->d[0]) || isinf(EX->d[0]) || EX->d[0]>(double)0x7fffffffffffffffLL) + if(isnan(EX->d[0]) || isinf(EX->d[0]) || EX->d[0]>=(double)0x7fffffffffffffffLL) GD->q[0] = 0x8000000000000000LL; else switch(emu->mxcsr.f.MXCSR_RC) { @@ -132,7 +132,7 @@ uintptr_t RunF20F(x64emu_t *emu, rex_t rex, uintptr_t addr, int *step) break; } } else { - if(isnan(EX->d[0]) || isinf(EX->d[0]) || EX->d[0]>0x7fffffff) + if(isnan(EX->d[0]) || isinf(EX->d[0]) || EX->d[0]>(double)0x7fffffff) GD->dword[0] = 0x80000000; else switch(emu->mxcsr.f.MXCSR_RC) { diff --git a/src/emu/x64runf30f.c b/src/emu/x64runf30f.c index 46268002..69f8fee7 100644 --- a/src/emu/x64runf30f.c +++ b/src/emu/x64runf30f.c @@ -104,12 +104,12 @@ uintptr_t RunF30F(x64emu_t *emu, rex_t rex, uintptr_t addr) GETEX(0); GETGD; if (rex.w) { - if(isnanf(EX->f[0]) || isinff(EX->f[0]) || EX->f[0]>(float)0x7fffffffffffffffLL) + if(isnanf(EX->f[0]) || isinff(EX->f[0]) || EX->f[0]>=(float)0x7fffffffffffffffLL) GD->q[0] = 0x8000000000000000LL; else GD->sq[0] = EX->f[0]; } else { - if(isnanf(EX->f[0]) || isinff(EX->f[0]) || EX->f[0]>(float)0x7fffffff) + if(isnanf(EX->f[0]) || isinff(EX->f[0]) || EX->f[0]>=(float)0x7fffffff) GD->dword[0] = 0x80000000; else GD->sdword[0] = EX->f[0]; @@ -121,7 +121,7 @@ uintptr_t RunF30F(x64emu_t *emu, rex_t rex, uintptr_t addr) GETEX(0); GETGD; if(rex.w) { - if(isnanf(EX->f[0]) || isinff(EX->f[0]) || EX->f[0]>(float)0x7fffffffffffffffLL) + if(isnanf(EX->f[0]) || isinff(EX->f[0]) || EX->f[0]>=(float)0x7fffffffffffffffLL) GD->q[0] = 0x8000000000000000LL; else switch(emu->mxcsr.f.MXCSR_RC) { |