about summary refs log tree commit diff stats
path: root/src/emu
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2022-07-03 13:35:17 +0200
committerptitSeb <sebastien.chev@gmail.com>2022-07-03 13:35:17 +0200
commita6f0525a4c2d96d2f54707369acc75e54d4d6574 (patch)
tree0a4bb96ef4c845ef2eb9499898a7b9a9e53d44dc /src/emu
parentd9707926faa80a1c25609e7a7dfa40d82d43f0a1 (diff)
downloadbox64-a6f0525a4c2d96d2f54707369acc75e54d4d6574.tar.gz
box64-a6f0525a4c2d96d2f54707369acc75e54d4d6574.zip
Added 64 66 0F 2E/2F ocodes ([DYNAREC] too) (for #298)
Diffstat (limited to 'src/emu')
-rw-r--r--src/emu/x64run64.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/emu/x64run64.c b/src/emu/x64run64.c
index af503324..3413fc81 100644
--- a/src/emu/x64run64.c
+++ b/src/emu/x64run64.c
@@ -172,6 +172,32 @@ int Run64(x64emu_t *emu, rex_t rex, int seg)
                             return 1;

                     }

                     break;

+

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

+                    // no special check...

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

+                    switch(rep) {

+                        case 0:

+                            RESET_FLAGS(emu);

+                            nextop = F8;

+                            GETEX_OFFS(0, tlsdata);

+                            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;

+                        default:

+                            return 1;

+                    }

+                    break;

+

                 

                 case 0x59:

                     switch(rep) {