about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2025-06-24 21:05:47 +0200
committerptitSeb <sebastien.chev@gmail.com>2025-06-24 21:05:47 +0200
commit266bb4aa88fa8e7f5fe90de5b4f20e9ccc201786 (patch)
treeb792740e99651a048c88a6028248ee89b83bee0b /src
parent82016ae44f329a8174d341ac67a14449619b3c5b (diff)
downloadbox64-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.c35
-rw-r--r--src/emu/x64runf0.c2
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 {