diff options
| author | Yang Liu <liuyang22@iscas.ac.cn> | 2025-01-15 02:04:35 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-01-14 19:04:35 +0100 |
| commit | a57bc9e7803d5050b2a26ac51f55762e889060cc (patch) | |
| tree | 811f117ebe58e57e0d8ebaf6ed0cb1ac001e5428 /src | |
| parent | 2e2bed4374a5ec1150ff29a3d01c2d0fcff4893a (diff) | |
| download | box64-a57bc9e7803d5050b2a26ac51f55762e889060cc.tar.gz box64-a57bc9e7803d5050b2a26ac51f55762e889060cc.zip | |
[RV64_DYNAREC] Fixed simm12 overflow in some places ([LA64_DYNAREC] too) (#2264)
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/la64/dynarec_la64_00.c | 4 | ||||
| -rw-r--r-- | 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 49b13433..a3a188a7 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 a0907f4d..357eaddf 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); |