about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-01-27 17:42:27 +0100
committerptitSeb <sebastien.chev@gmail.com>2024-01-27 17:42:27 +0100
commit3b8e0d69a3becc60d551acf4f0561ba1c2d015da (patch)
tree522df3d93e9a58ae8fc51ecfec3e43a2774dd717
parent56f2749da075088fd70929bf8aaac827770daf2a (diff)
downloadbox64-3b8e0d69a3becc60d551acf4f0561ba1c2d015da.tar.gz
box64-3b8e0d69a3becc60d551acf4f0561ba1c2d015da.zip
[ARM64_DYNAREC][32BITS] Added 27 opcode
-rw-r--r--src/dynarec/arm64/dynarec_arm64_00.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_00.c b/src/dynarec/arm64/dynarec_arm64_00.c
index 6d26ec95..3c825e2f 100644
--- a/src/dynarec/arm64/dynarec_arm64_00.c
+++ b/src/dynarec/arm64/dynarec_arm64_00.c
@@ -382,7 +382,19 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
             i64 = F32S;
             emit_and32c(dyn, ninst, rex, xRAX, i64, x3, x4);
             break;
-
+        case 0x27:
+            if(rex.is32bits) {
+                INST_NAME("DAA");
+                MESSAGE(LOG_DUMP, "Need Optimization DAA\n");
+                READFLAGS(X_AF|X_CF);
+                SETFLAGS(X_AF|X_CF|X_PF|X_SF|X_ZF, SF_SET);
+                UXTBx(x1, xRAX);
+                CALL_(daa8, x1, 0);
+                BFIz(xRAX, x1, 0, 8);
+            } else {
+                DEFAULT;
+            }
+            break;
         case 0x28:
             INST_NAME("SUB Eb, Gb");
             SETFLAGS(X_ALL, SF_SET_PENDING);
@@ -443,7 +455,7 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin
                 SETFLAGS(X_AF|X_CF|X_PF|X_SF|X_ZF, SF_SET);
                 UXTBx(x1, xRAX);
                 CALL_(das8, x1, 0);
-                BFIx(xRAX, x1, 0, 8);
+                BFIz(xRAX, x1, 0, 8);
             } else {
                 DEFAULT;
             }