From 73b2eb4a726b91ff3544c4a71457579feea115db Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Sun, 7 Mar 2021 20:23:59 +0100 Subject: Added a few SSE opcodes --- src/emu/x64run0f.c | 19 +++++++++++++++++++ src/emu/x64runf30f.c | 13 +++++++++++++ 2 files changed, 32 insertions(+) (limited to 'src') diff --git a/src/emu/x64run0f.c b/src/emu/x64run0f.c index 7a6ab005..a6404967 100644 --- a/src/emu/x64run0f.c +++ b/src/emu/x64run0f.c @@ -66,6 +66,25 @@ int Run0F(x64emu_t *emu, rex_t rex) EX->q[1] = GX->q[1]; break; + case 0x2E: /* UCOMISS Gx, Ex */ + // same for now + case 0x2F: /* COMISS Gx, Ex */ + RESET_FLAGS(emu); + nextop = F8; + GETEX(0); + GETGX; + if(isnan(GX->f[0]) || isnan(EX->f[0])) { + SET_FLAG(F_ZF); SET_FLAG(F_PF); SET_FLAG(F_CF); + } else if(isgreater(GX->f[0], EX->f[0])) { + CLEAR_FLAG(F_ZF); CLEAR_FLAG(F_PF); CLEAR_FLAG(F_CF); + } else if(isless(GX->f[0], EX->f[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; + GOCOND(0x40 , nextop = F8; diff --git a/src/emu/x64runf30f.c b/src/emu/x64runf30f.c index 49176b20..711f0785 100644 --- a/src/emu/x64runf30f.c +++ b/src/emu/x64runf30f.c @@ -66,6 +66,12 @@ int RunF30F(x64emu_t *emu, rex_t rex) GX->f[0] = ED->sdword[0]; break; + case 0x58: /* ADDSS Gx, Ex */ + nextop = F8; + GETEX(0); + GETGX; + GX->f[0] += EX->f[0]; + break; case 0x59: /* MULSS Gx, Ex */ nextop = F8; GETEX(0); @@ -79,6 +85,13 @@ int RunF30F(x64emu_t *emu, rex_t rex) GX->d[0] = EX->f[0]; break; + case 0x5E: /* DIVSS Gx, Ex */ + nextop = F8; + GETEX(0); + GETGX; + GX->f[0] /= EX->f[0]; + break; + case 0x6F: /* MOVDQU Gx, Ex */ nextop = F8; GETEX(0); -- cgit 1.4.1