about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorYang Liu <liuyang22@iscas.ac.cn>2025-05-20 23:01:45 +0800
committerGitHub <noreply@github.com>2025-05-20 17:01:45 +0200
commita1ac9cccc4d1a07f4c6e2650bf155902383ad424 (patch)
tree78b7352314293097a5a48d04b1bcbb6f115f3b9a /src
parentb13811259ae3e71efc5d3f098ce7bdd0b0d66269 (diff)
downloadbox64-a1ac9cccc4d1a07f4c6e2650bf155902383ad424.tar.gz
box64-a1ac9cccc4d1a07f4c6e2650bf155902383ad424.zip
[RV64_DYNAREC] Fixed more potential scratch register conflicts (#2652)
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/rv64/dynarec_rv64_660f.c2
-rw-r--r--src/dynarec/rv64/dynarec_rv64_helper.c8
2 files changed, 5 insertions, 5 deletions
diff --git a/src/dynarec/rv64/dynarec_rv64_660f.c b/src/dynarec/rv64/dynarec_rv64_660f.c
index 5e015a23..a3dc7999 100644
--- a/src/dynarec/rv64/dynarec_rv64_660f.c
+++ b/src/dynarec/rv64/dynarec_rv64_660f.c
@@ -1226,7 +1226,7 @@ uintptr_t dynarec64_660F(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int
             GETEW(x1, 0);
             GETGW(x2);
             ANDI(gd, gd, 15);
-            BEXT(x4, ed, gd, x3); // F_CF is 1
+            BEXT(x4, ed, gd, x5); // F_CF is 1
             ANDI(xFlags, xFlags, ~1);
             OR(xFlags, xFlags, x4);
             ADDI(x4, xZR, 1);
diff --git a/src/dynarec/rv64/dynarec_rv64_helper.c b/src/dynarec/rv64/dynarec_rv64_helper.c
index 4d584d35..73b0ea73 100644
--- a/src/dynarec/rv64/dynarec_rv64_helper.c
+++ b/src/dynarec/rv64/dynarec_rv64_helper.c
@@ -814,6 +814,10 @@ void call_c(dynarec_rv64_t* dyn, int ninst, void* fnc, int reg, int ret, int sav
         MV(ret, A0);
     }
 
+    // reinitialize sew
+    if (dyn->vector_sew != VECTOR_SEWNA)
+        vector_vsetvli(dyn, ninst, savereg, dyn->vector_sew, VECTOR_LMUL1, 1);
+
     LD(savereg, xSP, 0);
     ADDI(xSP, xSP, 16);
 #define GO(A) \
@@ -829,10 +833,6 @@ void call_c(dynarec_rv64_t* dyn, int ninst, void* fnc, int reg, int ret, int sav
     if (ret != xRIP)
         LD(xRIP, xEmu, offsetof(x64emu_t, ip));
 
-    // reinitialize sew
-    if (dyn->vector_sew != VECTOR_SEWNA)
-        vector_vsetvli(dyn, ninst, x3, dyn->vector_sew, VECTOR_LMUL1, 1);
-
     fpu_popcache(dyn, ninst, reg, 0);
     if (saveflags) {
         LD(xFlags, xEmu, offsetof(x64emu_t, eflags));