about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-03-08 15:53:48 +0100
committerptitSeb <sebastien.chev@gmail.com>2021-03-08 15:53:48 +0100
commit0692d4f3f25e43f82f8ecf7a3d575d47ca9eb7c6 (patch)
treedb886bb2306cccf534ab7273f31521fa7074030c /src
parent7a08d50f184f4ce7c04cbfa688afd9d84ee04f3c (diff)
downloadbox64-0692d4f3f25e43f82f8ecf7a3d575d47ca9eb7c6.tar.gz
box64-0692d4f3f25e43f82f8ecf7a3d575d47ca9eb7c6.zip
Added 66 0F 2E/2F opcodes
Diffstat (limited to 'src')
-rw-r--r--src/emu/x64run660f.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/emu/x64run660f.c b/src/emu/x64run660f.c
index 6dfa4485..9b48405d 100644
--- a/src/emu/x64run660f.c
+++ b/src/emu/x64run660f.c
@@ -43,6 +43,25 @@ int Run660F(x64emu_t *emu, rex_t rex)
         GETED(0);

         break;

 

+    case 0x2E:                      /* UCOMISD Gx, Ex */

+        // no special check...

+    case 0x2F:                      /* COMISD Gx, Ex */

+        RESET_FLAGS(emu);

+        nextop = F8;

+        GETEX(0);

+        GETGX;

+        if(isnan(GX->d[0]) || isnan(EX->d[0])) {

+            SET_FLAG(F_ZF); SET_FLAG(F_PF); SET_FLAG(F_CF);

+        } else if(isgreater(GX->d[0], EX->d[0])) {

+            CLEAR_FLAG(F_ZF); CLEAR_FLAG(F_PF); CLEAR_FLAG(F_CF);

+        } else if(isless(GX->d[0], EX->d[0])) {

+            CLEAR_FLAG(F_ZF); CLEAR_FLAG(F_PF); SET_FLAG(F_CF);

+        } else {

+            SET_FLAG(F_ZF); CLEAR_FLAG(F_PF); CLEAR_FLAG(F_CF);

+        }

+        CLEAR_FLAG(F_OF); CLEAR_FLAG(F_AF); CLEAR_FLAG(F_SF);

+        break;

+

     case 0x62:  /* PUNPCKLDQ Gx,Ex */

         nextop = F8;

         GETEX(0);