about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-09-24 14:20:22 +0200
committerptitSeb <sebastien.chev@gmail.com>2024-09-24 14:20:22 +0200
commit4409374c47df8c4f326c663f4a30f108ccdba48c (patch)
tree97444fdc2ea1d37c2e95ae5c8d4d37c21eb960b7 /src
parent4299e0a3a3b0eba117ad83c8504cec7d8c0a64ce (diff)
downloadbox64-4409374c47df8c4f326c663f4a30f108ccdba48c.tar.gz
box64-4409374c47df8c4f326c663f4a30f108ccdba48c.zip
[ARM64_DYNAREC] Added 67 A9 opcode, and fixed 67 opcode with ignored REX prefix
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/arm64/dynarec_arm64_67.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_67.c b/src/dynarec/arm64/dynarec_arm64_67.c
index 814a32d9..50fdf824 100644
--- a/src/dynarec/arm64/dynarec_arm64_67.c
+++ b/src/dynarec/arm64/dynarec_arm64_67.c
@@ -60,6 +60,7 @@ uintptr_t dynarec64_67(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
     while(opcode==0x67) opcode = F8;

     

     rep = 0;

+    rex.rex = 0;    // reset rex after 67

     while((opcode==0xF2) || (opcode==0xF3) || (opcode>=0x40 && opcode<=0x4F)) {

         if((opcode==0xF2) || (opcode==0xF3))

             rep = opcode-0xF1;

@@ -1122,6 +1123,14 @@ uintptr_t dynarec64_67(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
             }

             break;

 

+        case 0xA9:

+            INST_NAME("TEST EAX, Id");

+            SETFLAGS(X_ALL, SF_SET_PENDING);

+            i64 = F32S;

+            MOV64xw(x2, i64);

+            emit_test32(dyn, ninst, rex, xRAX, x2, x3, x4, x5);

+            break;

+

         case 0xC1:

             nextop = F8;

             switch((nextop>>3)&7) {