[RV64_DYNAREC] Fixed some missing sse_forget_reg for implicit xmm0 (#3056)

This commit is contained in:
Yang Liu
2025-10-12 01:27:58 +08:00
committed by GitHub
parent a5b3c0af5e
commit a40b6d49cb

View File

@@ -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);