diff options
| author | Yang Liu <liuyang22@iscas.ac.cn> | 2025-10-12 01:27:58 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-10-11 19:27:58 +0200 |
| commit | a40b6d49cb19134386b56648be43b8ccdd2b6c7a (patch) | |
| tree | 445db6f7b113958b93a693b3335181842cc605f0 | |
| parent | a5b3c0af5eb9883e8a749e92fced738cac5d1369 (diff) | |
| download | box64-a40b6d49cb19134386b56648be43b8ccdd2b6c7a.tar.gz box64-a40b6d49cb19134386b56648be43b8ccdd2b6c7a.zip | |
[RV64_DYNAREC] Fixed some missing sse_forget_reg for implicit xmm0 (#3056)
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_660f38.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/dynarec/rv64/dynarec_rv64_660f38.c b/src/dynarec/rv64/dynarec_rv64_660f38.c index cb8a234f..a5cbb9db 100644 --- a/src/dynarec/rv64/dynarec_rv64_660f38.c +++ b/src/dynarec/rv64/dynarec_rv64_660f38.c @@ -293,6 +293,7 @@ uintptr_t dynarec64_660F38(dynarec_rv64_t* dyn, uintptr_t addr, uint8_t opcode, nextop = F8; GETGX(); GETEX(x2, 0, 12); + sse_forget_reg(dyn, ninst, x6, 0); for (int i = 0; i < 4; ++i) { LW(x3, xEmu, offsetof(x64emu_t, xmm[0]) + i * 4); BGE(x3, xZR, 4 + 4 * 2); @@ -305,6 +306,7 @@ uintptr_t dynarec64_660F38(dynarec_rv64_t* dyn, uintptr_t addr, uint8_t opcode, nextop = F8; GETGX(); GETEX(x2, 0, 8); + sse_forget_reg(dyn, ninst, x6, 0); for (int i = 0; i < 2; ++i) { LD(x3, xEmu, offsetof(x64emu_t, xmm[0]) + i * 8); BGE(x3, xZR, 4 + 4 * 2); @@ -1190,6 +1192,7 @@ uintptr_t dynarec64_660F38(dynarec_rv64_t* dyn, uintptr_t addr, uint8_t opcode, nextop = F8; GETG; sse_forget_reg(dyn, ninst, x6, gd); + sse_forget_reg(dyn, ninst, x6, 0); ADDI(x3, xEmu, offsetof(x64emu_t, xmm[gd])); if (MODREG) { ed = (nextop & 7) + (rex.b << 3); @@ -1269,6 +1272,7 @@ uintptr_t dynarec64_660F38(dynarec_rv64_t* dyn, uintptr_t addr, uint8_t opcode, nextop = F8; GETG; sse_forget_reg(dyn, ninst, x6, gd); + sse_forget_reg(dyn, ninst, x6, 0); ADDI(x2, xEmu, offsetof(x64emu_t, xmm[gd])); if (MODREG) { ed = (nextop & 7) + (rex.b << 3); |