diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-07-09 21:31:50 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-07-09 21:31:50 +0200 |
| commit | b05c449dd0460deb4d2007cd24cb03c82db2ebaf (patch) | |
| tree | 797d88d911ccb76eea9eb71f3ee0c877f8656f73 /src/emu | |
| parent | bdb918c9c297296f6cf80634d9c15f3e5cfad253 (diff) | |
| download | box64-b05c449dd0460deb4d2007cd24cb03c82db2ebaf.tar.gz box64-b05c449dd0460deb4d2007cd24cb03c82db2ebaf.zip | |
Added F3 0F B8 opcode (for #33)
Diffstat (limited to 'src/emu')
| -rw-r--r-- | src/emu/x64runf30f.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/emu/x64runf30f.c b/src/emu/x64runf30f.c index a85a85e7..a5e02d59 100644 --- a/src/emu/x64runf30f.c +++ b/src/emu/x64runf30f.c @@ -238,6 +238,24 @@ int RunF30F(x64emu_t *emu, rex_t rex) memcpy(EX, GX, 16); // unaligned... break; + case 0xB8: /* POPCNT Gd,Ed */ + nextop = F8; + GETED(0); + GETGD; + if(rex.w) + GD->q[0] = __builtin_popcountl(ED->q[0]); + else + GD->q[0] = __builtin_popcount(ED->dword[0]); + RESET_FLAGS(emu); + CLEAR_FLAG(F_OF); + CLEAR_FLAG(F_SF); + CLEAR_FLAG(F_ZF); + CLEAR_FLAG(F_AF); + CLEAR_FLAG(F_CF); + CLEAR_FLAG(F_PF); + CONDITIONAL_SET_FLAG(GD->q[0]==0, F_ZF); + break; + case 0xBC: /* TZCNT Ed,Gd */ CHECK_FLAGS(emu); nextop = F8; |