From 950371427da5215bcca4c009f39e5c7a1158fef7 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Sun, 27 Apr 2025 14:15:29 +0200 Subject: [PATCH] [INTERP] Added 66 F3 0F BC opcode --- src/emu/x64run66f30f.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/src/emu/x64run66f30f.c b/src/emu/x64run66f30f.c index 91a772c2d..9e56e94d9 100644 --- a/src/emu/x64run66f30f.c +++ b/src/emu/x64run66f30f.c @@ -55,6 +55,39 @@ uintptr_t Run66F30F(x64emu_t *emu, rex_t rex, uintptr_t addr) switch(opcode) { + case 0xBC: /* TZCNT Ed,Gd */ + CHECK_FLAGS(emu); + nextop = F8; + GETEW(0); + GETGW; + if(rex.w) { + tmp64u = ED->q[0]; + if(tmp64u) { + tmp8u = 0; + while(!(tmp64u&(1LL<q[0] = tmp8u; + CONDITIONAL_SET_FLAG(tmp8u==0, F_ZF); + CLEAR_FLAG(F_CF); + } else { + CLEAR_FLAG(F_ZF); + SET_FLAG(F_CF); + GD->q[0] = 64; + } + } else { + tmp32u = ED->word[0]; + if(tmp32u) { + tmp8u = 0; + while(!(tmp32u&(1<word[0] = tmp8u; + CONDITIONAL_SET_FLAG(tmp8u==0, F_ZF); + CLEAR_FLAG(F_CF); + } else { + CLEAR_FLAG(F_ZF); + SET_FLAG(F_CF); + GD->word[0] = 16; + } + } + break; case 0xBD: /* LZCNT Ed,Gd */ CHECK_FLAGS(emu); nextop = F8;