diff options
| author | Yang Liu <liuyang22@iscas.ac.cn> | 2025-05-20 23:01:45 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-05-20 17:01:45 +0200 |
| commit | a1ac9cccc4d1a07f4c6e2650bf155902383ad424 (patch) | |
| tree | 78b7352314293097a5a48d04b1bcbb6f115f3b9a /src | |
| parent | b13811259ae3e71efc5d3f098ce7bdd0b0d66269 (diff) | |
| download | box64-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.c | 2 | ||||
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_helper.c | 8 |
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)); |