about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2023-12-23 12:18:08 +0100
committerptitSeb <sebastien.chev@gmail.com>2023-12-23 12:18:08 +0100
commit1b876006582b2982f0b666582c251ec302518124 (patch)
treec9786f00f8b5048ec35ba18135b8a593cf986259 /src
parent446fb9c99fd7d966c6f4bf9fe28bd203729b0352 (diff)
downloadbox64-1b876006582b2982f0b666582c251ec302518124.tar.gz
box64-1b876006582b2982f0b666582c251ec302518124.zip
[INTERPRETER] Added 64/65 86 opcode (for #1156)
Diffstat (limited to 'src')
-rw-r--r--src/emu/x64run64.c26
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);