about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-10-13 11:35:13 +0200
committerptitSeb <sebastien.chev@gmail.com>2024-10-13 11:35:20 +0200
commit6f2d067f3abb70aa6d8d386a1a2395e4bff39c9b (patch)
tree22e1d431c85a3ec5705d8813ec7076ebfe43e1c2 /src
parentd31b9c9caa6b28e5c9246dcffc88367ef9d4e8f6 (diff)
downloadbox64-6f2d067f3abb70aa6d8d386a1a2395e4bff39c9b.tar.gz
box64-6f2d067f3abb70aa6d8d386a1a2395e4bff39c9b.zip
[INTERPRETER] Added 64/65 85 opcode ([ARM64_DYNAREC] too) (for #1932)
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/arm64/dynarec_arm64_64.c11
-rw-r--r--src/emu/x64run64.c9
2 files changed, 20 insertions, 0 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_64.c b/src/dynarec/arm64/dynarec_arm64_64.c
index 681b386f..956ee565 100644
--- a/src/dynarec/arm64/dynarec_arm64_64.c
+++ b/src/dynarec/arm64/dynarec_arm64_64.c
@@ -669,6 +669,17 @@ uintptr_t dynarec64_64(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                     break;
             }
             break;
+
+        case 0x85:
+            INST_NAME("TEST Ed, Gd");
+            SETFLAGS(X_ALL, SF_SET_PENDING);
+            nextop=F8;
+            grab_segdata(dyn, addr, ninst, x6, seg);
+            GETGD;
+            GETEDO(x6, 0);
+            emit_test32(dyn, ninst, rex, ed, gd, x3, x5, x6);
+            break;
+
         case 0x88:
             INST_NAME("MOV Eb, Gb");
             nextop = F8;
diff --git a/src/emu/x64run64.c b/src/emu/x64run64.c
index b80a5ef4..ae9512b0 100644
--- a/src/emu/x64run64.c
+++ b/src/emu/x64run64.c
@@ -528,6 +528,15 @@ uintptr_t Run64(x64emu_t *emu, rex_t rex, int seg, uintptr_t addr)
             }

             break;

 

+        case 0x85:                      /* TEST Ed,Gd */

+            nextop = F8;

+            GETED_OFFS(0, tlsdata);

+            GETGD;

+            if(rex.w)

+                test64(emu, ED->q[0], GD->q[0]);

+            else

+                test32(emu, ED->dword[0], GD->dword[0]);

+            break;

         case 0x86:                      /* XCHG Eb,Gb */

             nextop = F8;

 #if defined(DYNAREC) && !defined(TEST_INTERPRETER)