about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorYang Liu <liuyang22@iscas.ac.cn>2024-12-27 17:06:19 +0800
committerGitHub <noreply@github.com>2024-12-27 10:06:19 +0100
commit8b2b96d5c584e2b2dedc95c0a1056dd73fa93899 (patch)
tree4bcb82cb163cf72a43e283618aaf16673ee09622 /src
parente21a50693695820b475f094391b0c6efbc4cda96 (diff)
downloadbox64-8b2b96d5c584e2b2dedc95c0a1056dd73fa93899.tar.gz
box64-8b2b96d5c584e2b2dedc95c0a1056dd73fa93899.zip
[LA64_DYNAREC] Fixed some minor issues on LBT path (#2218)
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/la64/dynarec_la64_00.c3
-rw-r--r--src/dynarec/la64/dynarec_la64_0f.c2
-rw-r--r--src/dynarec/la64/dynarec_la64_helper.c1
3 files changed, 3 insertions, 3 deletions
diff --git a/src/dynarec/la64/dynarec_la64_00.c b/src/dynarec/la64/dynarec_la64_00.c
index 7606421d..49b13433 100644
--- a/src/dynarec/la64/dynarec_la64_00.c
+++ b/src/dynarec/la64/dynarec_la64_00.c
@@ -532,7 +532,6 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
             gd = TO_NAT((opcode & 0x07) + (rex.b << 3));
             POP1z(gd);
             break;
-            break;
         case 0x63:
             if (rex.is32bits) {
                 // this is ARPL opcode
@@ -1220,6 +1219,7 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
         case 0x9C:
             INST_NAME("PUSHF");
             READFLAGS(X_ALL);
+            RESTORE_EFLAGS(x1);
             PUSH1z(xFlags);
             break;
         case 0x9D:
@@ -1229,6 +1229,7 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
             MOV32w(x1, 0x3F7FD7);
             AND(xFlags, xFlags, x1);
             ORI(xFlags, xFlags, 0x202);
+            SPILL_EFLAGS();
             SET_DFNONE();
             if (box64_wine) { // should this be done all the time?
                 ANDI(x1, xFlags, 1 << F_TF);
diff --git a/src/dynarec/la64/dynarec_la64_0f.c b/src/dynarec/la64/dynarec_la64_0f.c
index d1a6c396..6d1a4da9 100644
--- a/src/dynarec/la64/dynarec_la64_0f.c
+++ b/src/dynarec/la64/dynarec_la64_0f.c
@@ -1072,7 +1072,6 @@ uintptr_t dynarec64_0F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
                     } else if (!rex.w) {
                         ZEROUP(ed);
                     }
-                    MARK;
                     break;
                 case 6:
                     INST_NAME("BTR Ed, Ib");
@@ -1093,7 +1092,6 @@ uintptr_t dynarec64_0F(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni
                     } else if (!rex.w) {
                         ZEROUP(ed);
                     }
-                    MARK;
                     break;
                 case 7:
                     INST_NAME("BTC Ed, Ib");
diff --git a/src/dynarec/la64/dynarec_la64_helper.c b/src/dynarec/la64/dynarec_la64_helper.c
index 48e5fc10..b6448035 100644
--- a/src/dynarec/la64/dynarec_la64_helper.c
+++ b/src/dynarec/la64/dynarec_la64_helper.c
@@ -680,6 +680,7 @@ void iret_to_epilog(dynarec_la64_t* dyn, int ninst, int is64bits)
     MOV32w(x1, 0x3F7FD7);
     AND(xFlags, xFlags, x1);
     ORI(xFlags, xFlags, 0x2);
+    SPILL_EFLAGS();
     SET_DFNONE();
     // POP RSP
     if (is64bits) {