about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2023-03-08 11:48:53 +0100
committerptitSeb <sebastien.chev@gmail.com>2023-03-08 11:48:53 +0100
commitf82a6b7b414d6bde0ddaa1d4b4e164f18b3d529d (patch)
tree274d244526812f01497c3063ebe185a99263a4fc /src
parentc79c42b62df69e454f004377bdaebffcee4e0fc2 (diff)
downloadbox64-f82a6b7b414d6bde0ddaa1d4b4e164f18b3d529d.tar.gz
box64-f82a6b7b414d6bde0ddaa1d4b4e164f18b3d529d.zip
[DYNAREC] Fixed a nasty bug in loadCache/unloadCache of x87 regs
Diffstat (limited to 'src')
-rwxr-xr-xsrc/dynarec/arm64/dynarec_arm64_helper.c4
-rwxr-xr-xsrc/dynarec/dynarec_native_pass.c4
2 files changed, 4 insertions, 4 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_helper.c b/src/dynarec/arm64/dynarec_arm64_helper.c
index 569add20..aa09934c 100755
--- a/src/dynarec/arm64/dynarec_arm64_helper.c
+++ b/src/dynarec/arm64/dynarec_arm64_helper.c
@@ -1473,7 +1473,7 @@ static void loadCache(dynarec_arm_t* dyn, int ninst, int stack_cnt, int s1, int
             }
             *s3_top += a;
             *s2_val = 0;
-            ADDw_REG_LSL(s2, xEmu, s3, 3);
+            ADDx_REG_LSL(s2, xEmu, s3, 3);
             VLDR64_U12(i, s2, offsetof(x64emu_t, x87));
             if(t==NEON_CACHE_ST_F) {
                 FCVT_S_D(i, i);
@@ -1520,7 +1520,7 @@ static void unloadCache(dynarec_arm_t* dyn, int ninst, int stack_cnt, int s1, in
                 ANDw_mask(s3, s3, 0, 2); //mask=7    // (emu->top + i)&7
             }
             *s3_top += a;
-            ADDw_REG_LSL(s2, xEmu, s3, 3);
+            ADDx_REG_LSL(s2, xEmu, s3, 3);
             *s2_val = 0;
             if(t==NEON_CACHE_ST_F) {
                 FCVT_D_S(i, i);
diff --git a/src/dynarec/dynarec_native_pass.c b/src/dynarec/dynarec_native_pass.c
index df115473..ca8da160 100755
--- a/src/dynarec/dynarec_native_pass.c
+++ b/src/dynarec/dynarec_native_pass.c
@@ -205,7 +205,7 @@ uintptr_t native_pass(dynarec_native_t* dyn, uintptr_t addr)
         if(dyn->forward) {
             if(dyn->forward_to == addr && !need_epilog) {
                 // we made it!
-                if(box64_dynarec_dump) dynarec_log(LOG_NONE, "Forward extend block %p -> %p\n", (void*)dyn->forward, (void*)dyn->forward_to);
+                if(box64_dynarec_dump) dynarec_log(LOG_NONE, "Forward extend block for %d bytes %p -> %p\n", dyn->forward_to-dyn->forward, (void*)dyn->forward, (void*)dyn->forward_to);
                 dyn->forward = 0;
                 dyn->forward_to = 0;
                 dyn->forward_size = 0;
@@ -213,7 +213,7 @@ uintptr_t native_pass(dynarec_native_t* dyn, uintptr_t addr)
                 ok = 1; // in case it was 0
             } else if ((dyn->forward_to < addr) || !ok) {
                 // something when wrong! rollback
-                if(box64_dynarec_dump) dynarec_log(LOG_NONE, "Could not forward extend block %p -> %p\n", (void*)dyn->forward, (void*)dyn->forward_to);
+                if(box64_dynarec_dump) dynarec_log(LOG_NONE, "Could not forward extend block for %d bytes %p -> %p\n", dyn->forward_to-dyn->forward, (void*)dyn->forward, (void*)dyn->forward_to);
                 ok = 0;
                 dyn->size = dyn->forward_size;
                 ninst = dyn->forward_ninst;