From a8866c3f416a68e829d92ece0279a747270afa09 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Tue, 2 Apr 2024 23:21:14 +0200 Subject: [ARM64_DYNAREC] Better fix for #1366, that should help #1383) --- src/dynarec/arm64/dynarec_arm64_functions.c | 4 +--- src/dynarec/arm64/dynarec_arm64_pass0.h | 1 - src/dynarec/dynarec_native.c | 2 -- src/dynarec/dynarec_native_pass.c | 4 ++++ 4 files changed, 5 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/dynarec/arm64/dynarec_arm64_functions.c b/src/dynarec/arm64/dynarec_arm64_functions.c index 9e3748ed..73946f88 100644 --- a/src/dynarec/arm64/dynarec_arm64_functions.c +++ b/src/dynarec/arm64/dynarec_arm64_functions.c @@ -212,15 +212,13 @@ static void neoncache_promote_double_combined(dynarec_arm_t* dyn, int ninst, int neoncache_promote_double_internal(dyn, ninst-1, maxinst, a-dyn->insts[ninst].n.stack_push); // go forward is combined is not pop'd if(a-dyn->insts[ninst].n.stack_pop>=0) - if(!dyn->insts[ninst+1].n.barrier) + if(!((ninst+1size) && dyn->insts[ninst+1].n.barrier)) neoncache_promote_double_forward(dyn, ninst+1, maxinst, a-dyn->insts[ninst].n.stack_pop); } } } static void neoncache_promote_double_internal(dynarec_arm_t* dyn, int ninst, int maxinst, int a) { - if(dyn->insts[ninst+1].n.barrier) - return; while(ninst>=0) { a+=dyn->insts[ninst].n.stack_pop; // adjust Stack depth: add pop'd ST (going backward) int i = neoncache_get_st_f_i64(dyn, ninst, a); diff --git a/src/dynarec/arm64/dynarec_arm64_pass0.h b/src/dynarec/arm64/dynarec_arm64_pass0.h index a335c6c5..d86981b3 100644 --- a/src/dynarec/arm64/dynarec_arm64_pass0.h +++ b/src/dynarec/arm64/dynarec_arm64_pass0.h @@ -22,7 +22,6 @@ #define SET_HASCALLRET() dyn->insts[ninst].x64.has_callret = 1 #define NEW_INST \ ++dyn->size; \ - memset(&dyn->insts[ninst], 0, sizeof(instruction_native_t)); \ dyn->insts[ninst].x64.addr = ip; \ dyn->n.combined1 = dyn->n.combined2 = 0;\ dyn->n.swapped = 0; dyn->n.barrier = 0; \ diff --git a/src/dynarec/dynarec_native.c b/src/dynarec/dynarec_native.c index f3af8d88..d53861ec 100644 --- a/src/dynarec/dynarec_native.c +++ b/src/dynarec/dynarec_native.c @@ -405,7 +405,6 @@ void CancelBlock64(int need_lock) mutex_lock(&my_context->mutex_dyndump); dynarec_native_t* helper = (dynarec_native_t*)current_helper; if(helper) { - memset(static_insts, 0, sizeof(static_insts)); if(helper->dynablock && helper->dynablock->actual_block) { FreeDynarecMap((uintptr_t)helper->dynablock->actual_block); helper->dynablock->actual_block = NULL; @@ -674,7 +673,6 @@ void* FillBlock64(dynablock_t* block, uintptr_t addr, int alternate, int is32bit } // ok, free the helper now //dynaFree(helper.insts); - memset(static_insts, 0, sizeof(static_insts)); helper.insts = NULL; if(insts_rsize/sizeof(instsize_t)forward_to = 0; dyn->forward_size = 0; dyn->forward_ninst = 0; + #if STEP == 0 + memset(&dyn->insts[ninst], 0, sizeof(instruction_native_t)); + #endif fpu_reset(dyn); ARCH_INIT(); int reset_n = -1; @@ -294,6 +297,7 @@ uintptr_t native_pass(dynarec_native_t* dyn, uintptr_t addr, int alternate, int } ++ninst; #if STEP == 0 + memset(&dyn->insts[ninst], 0, sizeof(instruction_native_t)); if(ok && (((box64_dynarec_bigblock=box64_nodynarec_start && addr