diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2025-06-25 10:59:04 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2025-06-25 10:59:04 +0200 |
| commit | 3698763bbe08dbc1f5d22894e1f8f1e13c51c765 (patch) | |
| tree | 87701654b93a1044beb824befcf8c60fd51ac52e | |
| parent | d67bc08d2dde39ae87befa2d4c031629a7c1ee62 (diff) | |
| download | box64-3698763bbe08dbc1f5d22894e1f8f1e13c51c765.tar.gz box64-3698763bbe08dbc1f5d22894e1f8f1e13c51c765.zip | |
[INTERP] More work on UD flags
| -rw-r--r-- | src/emu/x64runavx0f38.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/src/emu/x64runavx0f38.c b/src/emu/x64runavx0f38.c index 8c943c6b..a96b8f6b 100644 --- a/src/emu/x64runavx0f38.c +++ b/src/emu/x64runavx0f38.c @@ -95,9 +95,9 @@ uintptr_t RunAVX_0F38(x64emu_t *emu, vex_t vex, uintptr_t addr, int *step) CLEAR_FLAG(F_OF); CLEAR_FLAG(F_AF); // Undef if(BOX64ENV(cputype)) { - CLEAR_FLAG(F_PF); // Undef + CLEAR_FLAG(F_PF); } else { - SET_FLAG(F_PF); // Undef + CONDITIONAL_SET_FLAG(PARITY(VD->byte[0] & 0xff), F_PF); } break; case 2: /* BLSMSK Vd, Ed */ @@ -138,9 +138,9 @@ uintptr_t RunAVX_0F38(x64emu_t *emu, vex_t vex, uintptr_t addr, int *step) CLEAR_FLAG(F_OF); CLEAR_FLAG(F_AF); // Undef if(BOX64ENV(cputype)) { - CLEAR_FLAG(F_PF); // Undef + CLEAR_FLAG(F_PF); } else { - SET_FLAG(F_PF); // Undef + CONDITIONAL_SET_FLAG(PARITY(VD->byte[0] & 0xff), F_PF); } break; @@ -168,8 +168,13 @@ uintptr_t RunAVX_0F38(x64emu_t *emu, vex_t vex, uintptr_t addr, int *step) CONDITIONAL_SET_FLAG(rex.w?(GD->q[0]==0):(GD->dword[0]==0), F_ZF); CONDITIONAL_SET_FLAG(rex.w?(VD->q[0]>>63):(VD->dword[0]>>31), F_SF); CLEAR_FLAG(F_OF); - CLEAR_FLAG(F_AF); // Undef - CLEAR_FLAG(F_PF); // Undef + // UD flags + CLEAR_FLAG(F_AF); + if(BOX64ENV(cputype)) { + CLEAR_FLAG(F_PF); + } else { + CONDITIONAL_SET_FLAG(PARITY(VD->byte[0] & 0xff), F_PF); + } break; case 0xF7: /* BEXTR Gd, Ed, Vd */ |