diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2022-07-03 13:35:17 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2022-07-03 13:35:17 +0200 |
| commit | a6f0525a4c2d96d2f54707369acc75e54d4d6574 (patch) | |
| tree | 0a4bb96ef4c845ef2eb9499898a7b9a9e53d44dc /src/emu | |
| parent | d9707926faa80a1c25609e7a7dfa40d82d43f0a1 (diff) | |
| download | box64-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.c | 26 |
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) { |