about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-07-09 21:31:50 +0200
committerptitSeb <sebastien.chev@gmail.com>2021-07-09 21:31:50 +0200
commitb05c449dd0460deb4d2007cd24cb03c82db2ebaf (patch)
tree797d88d911ccb76eea9eb71f3ee0c877f8656f73
parentbdb918c9c297296f6cf80634d9c15f3e5cfad253 (diff)
downloadbox64-b05c449dd0460deb4d2007cd24cb03c82db2ebaf.tar.gz
box64-b05c449dd0460deb4d2007cd24cb03c82db2ebaf.zip
Added F3 0F B8 opcode (for #33)
-rw-r--r--src/emu/x64runf30f.c18
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;