diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-06-24 16:07:10 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-06-24 16:07:10 +0200 |
| commit | fa702c0240d0741def3955697067b562cc7a7fcd (patch) | |
| tree | 9c6e9cc3cedffc9ba8249b933c75e88094cd4c64 /src/emu | |
| parent | 34bc807bd5218d42e16757ed5dc7edd2751f5bf0 (diff) | |
| download | box64-fa702c0240d0741def3955697067b562cc7a7fcd.tar.gz box64-fa702c0240d0741def3955697067b562cc7a7fcd.zip | |
Improved CPUID a bit more, adding RDRAND (helps geekbench6 avx2 version)
Diffstat (limited to 'src/emu')
| -rw-r--r-- | src/emu/x64run0f.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/src/emu/x64run0f.c b/src/emu/x64run0f.c index 8aa634ae..4f12e615 100644 --- a/src/emu/x64run0f.c +++ b/src/emu/x64run0f.c @@ -1704,12 +1704,12 @@ uintptr_t Run0F(x64emu_t *emu, rex_t rex, uintptr_t addr, int *step) GX->q[0] = eax1.q[0]; GX->q[1] = eax1.q[1]; break; - case 0xC7: /* CMPXCHG8B Eq */ + case 0xC7: CHECK_FLAGS(emu); nextop = F8; GETE8xw(0); switch((nextop>>3)&7) { - case 1: + case 1: /* CMPXCHG8B Eq */ if(rex.w) { tmp64u = ED->q[0]; tmp64u2= ED->q[1]; @@ -1736,6 +1736,22 @@ uintptr_t Run0F(x64emu_t *emu, rex_t rex, uintptr_t addr, int *step) } } break; + case 6: /* RDRAND Ed */ + RESET_FLAGS(emu); + CLEAR_FLAG(F_OF); + CLEAR_FLAG(F_SF); + CLEAR_FLAG(F_PF); + CLEAR_FLAG(F_ZF); + CLEAR_FLAG(F_AF); + SET_FLAG(F_CF); + if(rex.w) + ED->q[0] = get_random64(); + else { + ED->dword[0] = get_random32(); + if(MODREG) + ED->dword[1] = 1; + } + break; default: return 0; } |