about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorYang Liu <liuyang22@iscas.ac.cn>2025-01-15 02:04:35 +0800
committerGitHub <noreply@github.com>2025-01-14 19:04:35 +0100
commita57bc9e7803d5050b2a26ac51f55762e889060cc (patch)
tree811f117ebe58e57e0d8ebaf6ed0cb1ac001e5428 /src
parent2e2bed4374a5ec1150ff29a3d01c2d0fcff4893a (diff)
downloadbox64-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.c4
-rw-r--r--src/dynarec/rv64/dynarec_rv64_00_3.c4
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);