diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-03-09 18:23:30 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-03-09 18:23:30 +0100 |
| commit | fd3536161452592bf673a0a42ecf58197ad94104 (patch) | |
| tree | d33e8d08bb68c6d3e33e38bf117cb3d31a964169 | |
| parent | 85dfd5b9783208070155be3d4b0f374aaa6b2190 (diff) | |
| download | box64-fd3536161452592bf673a0a42ecf58197ad94104.tar.gz box64-fd3536161452592bf673a0a42ecf58197ad94104.zip | |
Added F3 0F C2 opcode
| -rw-r--r-- | src/emu/x64runf30f.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/src/emu/x64runf30f.c b/src/emu/x64runf30f.c index 4e8d67c2..fa90b459 100644 --- a/src/emu/x64runf30f.c +++ b/src/emu/x64runf30f.c @@ -31,7 +31,8 @@ int RunF30F(x64emu_t *emu, rex_t rex) { uint8_t opcode; uint8_t nextop; - int32_t tmp32s; + int8_t tmp8s; + uint8_t tmp8u; reg64_t *oped, *opgd; sse_regs_t *opex, *opgx; @@ -153,6 +154,24 @@ int RunF30F(x64emu_t *emu, rex_t rex) memcpy(EX, GX, 16); // unaligned... break; + case 0xC2: /* CMPSS Gx, Ex, Ib */ + nextop = F8; + GETEX(1); + GETGX; + tmp8u = F8; + tmp8s = 0; + switch(tmp8u&7) { + case 0: tmp8s=(GX->f[0] == EX->f[0]); break; + case 1: tmp8s=isless(GX->f[0], EX->f[0]); break; + case 2: tmp8s=islessequal(GX->f[0], EX->f[0]); break; + case 3: tmp8s=isnan(GX->f[0]) || isnan(EX->f[0]); break; + case 4: tmp8s=(GX->f[0] != EX->f[0]); break; + case 5: tmp8s=isnan(GX->f[0]) || isnan(EX->f[0]) || isgreaterequal(GX->f[0], EX->f[0]); break; + case 6: tmp8s=isnan(GX->f[0]) || isnan(EX->f[0]) || isgreater(GX->f[0], EX->f[0]); break; + case 7: tmp8s=!isnan(GX->f[0]) && !isnan(EX->f[0]); break; + } + GX->ud[0]=(tmp8s)?0xffffffff:0; + break; default: return 1; |