diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-03-08 11:48:53 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-03-08 11:48:53 +0100 |
| commit | f82a6b7b414d6bde0ddaa1d4b4e164f18b3d529d (patch) | |
| tree | 274d244526812f01497c3063ebe185a99263a4fc /src | |
| parent | c79c42b62df69e454f004377bdaebffcee4e0fc2 (diff) | |
| download | box64-f82a6b7b414d6bde0ddaa1d4b4e164f18b3d529d.tar.gz box64-f82a6b7b414d6bde0ddaa1d4b4e164f18b3d529d.zip | |
[DYNAREC] Fixed a nasty bug in loadCache/unloadCache of x87 regs
Diffstat (limited to 'src')
| -rwxr-xr-x | src/dynarec/arm64/dynarec_arm64_helper.c | 4 | ||||
| -rwxr-xr-x | src/dynarec/dynarec_native_pass.c | 4 |
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; |