From 3698763bbe08dbc1f5d22894e1f8f1e13c51c765 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Wed, 25 Jun 2025 10:59:04 +0200 Subject: [INTERP] More work on UD flags --- src/emu/x64runavx0f38.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'src') 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 */ -- cgit 1.4.1