diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2025-06-24 21:05:47 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2025-06-24 21:05:47 +0200 |
| commit | 266bb4aa88fa8e7f5fe90de5b4f20e9ccc201786 (patch) | |
| tree | b792740e99651a048c88a6028248ee89b83bee0b /src | |
| parent | 82016ae44f329a8174d341ac67a14449619b3c5b (diff) | |
| download | box64-266bb4aa88fa8e7f5fe90de5b4f20e9ccc201786.tar.gz box64-266bb4aa88fa8e7f5fe90de5b4f20e9ccc201786.zip | |
[INTERP] Added 66 F0 F7 /2 opcode (aligned only)
Diffstat (limited to 'src')
| -rw-r--r-- | src/emu/x64run66f0.c | 35 | ||||
| -rw-r--r-- | src/emu/x64runf0.c | 2 |
2 files changed, 36 insertions, 1 deletions
diff --git a/src/emu/x64run66f0.c b/src/emu/x64run66f0.c index 4401d260..da67fcbe 100644 --- a/src/emu/x64run66f0.c +++ b/src/emu/x64run66f0.c @@ -220,6 +220,41 @@ uintptr_t Run66F0(x64emu_t *emu, rex_t rex, uintptr_t addr) #endif break; + case 0xF7: /* GRP3 Ed(,Id) */ + nextop = F8; + nextop = (nextop>>3)&7; + GETEW((nextop<2)?2:0); + switch(nextop) { + case 2: /* NOT Ed */ +#if defined(DYNAREC) && !defined(TEST_INTERPRETER) + if(rex.w) + do { + tmp64u = native_lock_read_dd(ED); + tmp64u = not64(emu, tmp64u); + } while(native_lock_write_dd(ED, tmp64u)); + else { + do { + tmp16u = native_lock_read_h(ED); + tmp16u = not16(emu, tmp16u); + } while(native_lock_write_h(ED, tmp16u)); + } +#else + if(rex.w) { + pthread_mutex_lock(&my_context->mutex_lock); + ED->q[0] = not64(emu, ED->q[0]); + pthread_mutex_unlock(&my_context->mutex_lock); + } else { + pthread_mutex_lock(&my_context->mutex_lock); + ED->word[0] = not16(emu, ED->dword[0]); + pthread_mutex_unlock(&my_context->mutex_lock); + } +#endif + break; + default: + return 0; + } + break; + case 0xFF: /* GRP 5 Ed */ nextop = F8; GETEW(0); diff --git a/src/emu/x64runf0.c b/src/emu/x64runf0.c index fd1d120f..b4af10c1 100644 --- a/src/emu/x64runf0.c +++ b/src/emu/x64runf0.c @@ -1264,7 +1264,7 @@ uintptr_t RunF0(x64emu_t *emu, rex_t rex, uintptr_t addr) tmp8u = (nextop>>3)&7; GETED((tmp8u<2)?4:0); switch(tmp8u) { - case 2: /* NOT Eb */ + case 2: /* NOT Ed */ #if defined(DYNAREC) && !defined(TEST_INTERPRETER) if(rex.w) do { |