From 54849bd90adfba46e245060602113c3d0c504175 Mon Sep 17 00:00:00 2001 From: Yang Liu Date: Wed, 15 Jan 2025 01:53:32 +0800 Subject: [PATCH] [RV64_DYNAREC] Fixed simm12 overflow in some places ([LA64_DYNAREC] too) --- src/dynarec/la64/dynarec_la64_00.c | 4 ++-- src/dynarec/rv64/dynarec_rv64_00_3.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/dynarec/la64/dynarec_la64_00.c b/src/dynarec/la64/dynarec_la64_00.c index 49b1343347..a3a188a7f9 100644 --- a/src/dynarec/la64/dynarec_la64_00.c +++ b/src/dynarec/la64/dynarec_la64_00.c @@ -2176,7 +2176,7 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni SETFLAGS(X_ALL, SF_SET_NODF, NAT_FLAGS_NOFUSION); // Hack to set flags to "dont'care" state SKIPTEST(x1); BARRIER(BARRIER_FULL); - if (dyn->last_ip && (addr - dyn->last_ip < 0x1000)) { + if (dyn->last_ip && (addr - dyn->last_ip < 0x800)) { ADDI_D(x2, xRIP, addr - dyn->last_ip); } else { TABLE64(x2, addr); @@ -2211,7 +2211,7 @@ uintptr_t dynarec64_00(dynarec_la64_t* dyn, uintptr_t addr, uintptr_t ip, int ni BNE_MARK(xRIP, x3); // Not the expected address, exit dynarec block POP1(xRIP); // pop the return address if (dyn->insts[ninst].retn) { - if (dyn->insts[ninst].retn < 0x1000) { + if (dyn->insts[ninst].retn < 0x800) { ADDI_D(xRSP, xRSP, dyn->insts[ninst].retn); } else { MOV64x(x3, dyn->insts[ninst].retn); diff --git a/src/dynarec/rv64/dynarec_rv64_00_3.c b/src/dynarec/rv64/dynarec_rv64_00_3.c index a0907f4dee..357eaddfa0 100644 --- a/src/dynarec/rv64/dynarec_rv64_00_3.c +++ b/src/dynarec/rv64/dynarec_rv64_00_3.c @@ -918,7 +918,7 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int SETFLAGS(X_ALL, SF_SET_NODF, NAT_FLAGS_NOFUSION); // Hack to set flags to "dont'care" state SKIPTEST(x1); BARRIER(BARRIER_FULL); - if (dyn->last_ip && (addr - dyn->last_ip < 0x1000)) { + if (dyn->last_ip && (addr - dyn->last_ip < 0x800)) { ADDI(x2, xRIP, addr - dyn->last_ip); } else { TABLE64(x2, addr); @@ -953,7 +953,7 @@ uintptr_t dynarec64_00_3(dynarec_rv64_t* dyn, uintptr_t addr, uintptr_t ip, int BNE_MARK(xRIP, x3); // Not the expected address, exit dynarec block POP1(xRIP); // pop the return address if (dyn->insts[ninst].retn) { - if (dyn->insts[ninst].retn < 0x1000) { + if (dyn->insts[ninst].retn < 0x800) { ADDI(xRSP, xRSP, dyn->insts[ninst].retn); } else { MOV64x(x3, dyn->insts[ninst].retn);