diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-12-23 12:18:08 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-12-23 12:18:08 +0100 |
| commit | 1b876006582b2982f0b666582c251ec302518124 (patch) | |
| tree | c9786f00f8b5048ec35ba18135b8a593cf986259 /src | |
| parent | 446fb9c99fd7d966c6f4bf9fe28bd203729b0352 (diff) | |
| download | box64-1b876006582b2982f0b666582c251ec302518124.tar.gz box64-1b876006582b2982f0b666582c251ec302518124.zip | |
[INTERPRETER] Added 64/65 86 opcode (for #1156)
Diffstat (limited to 'src')
| -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 9a790cff..91cae9b6 100644 --- a/src/emu/x64run64.c +++ b/src/emu/x64run64.c @@ -515,6 +515,32 @@ uintptr_t Run64(x64emu_t *emu, rex_t rex, int seg, uintptr_t addr) } break; + case 0x86: /* XCHG Eb,Gb */ + nextop = F8; +#if defined(DYNAREC) && !defined(TEST_INTERPRETER) + GETEB_OFFS(0, tlsdata); + GETGB; + if(MODREG) { // reg / reg: no lock + tmp8u = GB; + GB = EB->byte[0]; + EB->byte[0] = tmp8u; + } else { + GB = native_lock_xchg_b(EB, GB); + } + // dynarec use need it's own mecanism +#else + GETEB_OFFS(0, tlsdata); + GETGB; + if(!MODREG) + pthread_mutex_lock(&my_context->mutex_lock); // XCHG always LOCK (but when accessing memory only) + tmp8u = GB; + GB = EB->byte[0]; + EB->byte[0] = tmp8u; + if(!MODREG) + pthread_mutex_unlock(&my_context->mutex_lock); +#endif + break; + case 0x88: /* MOV FS:Eb,Gb */ nextop = F8; GETEB_OFFS(0, tlsdata); |