From f83b192d701e5104de8b81b76cef44c1afa7c25b Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Sun, 25 Jun 2023 18:59:32 +0200 Subject: [ARM64_DYNAREC] Fixed issue with the newly introduced I64 optim for x87 regs (fixes sound issue of #465) --- src/dynarec/arm64/dynarec_arm64_functions.c | 5 +++-- src/dynarec/arm64/dynarec_arm64_helper.c | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/dynarec/arm64/dynarec_arm64_functions.c b/src/dynarec/arm64/dynarec_arm64_functions.c index d2963b55..6944b785 100755 --- a/src/dynarec/arm64/dynarec_arm64_functions.c +++ b/src/dynarec/arm64/dynarec_arm64_functions.c @@ -300,9 +300,10 @@ int neoncache_combine_st(dynarec_arm_t* dyn, int ninst, int a, int b) if( neoncache_get_current_st(dyn, ninst, a)==NEON_CACHE_ST_F && neoncache_get_current_st(dyn, ninst, b)==NEON_CACHE_ST_F ) return NEON_CACHE_ST_F; - if( neoncache_get_current_st(dyn, ninst, a)==NEON_CACHE_ST_I64 + // don't combine i64, it's only for load/store + /*if( neoncache_get_current_st(dyn, ninst, a)==NEON_CACHE_ST_I64 && neoncache_get_current_st(dyn, ninst, b)==NEON_CACHE_ST_I64 ) - return NEON_CACHE_ST_I64; + return NEON_CACHE_ST_I64;*/ return NEON_CACHE_ST_D; } diff --git a/src/dynarec/arm64/dynarec_arm64_helper.c b/src/dynarec/arm64/dynarec_arm64_helper.c index 153f82a4..34b2744d 100755 --- a/src/dynarec/arm64/dynarec_arm64_helper.c +++ b/src/dynarec/arm64/dynarec_arm64_helper.c @@ -1135,6 +1135,8 @@ int x87_get_current_cache(dynarec_arm_t* dyn, int ninst, int st, int t) #if STEP == 1 if(t==NEON_CACHE_ST_D && (dyn->n.neoncache[dyn->n.x87reg[i]].t==NEON_CACHE_ST_F || dyn->n.neoncache[dyn->n.x87reg[i]].t==NEON_CACHE_ST_I64)) neoncache_promote_double(dyn, ninst, st); + else if(t==NEON_CACHE_ST_F && (dyn->n.neoncache[dyn->n.x87reg[i]].t==NEON_CACHE_ST_I64)) + neoncache_promote_double(dyn, ninst, st); #endif return i; } -- cgit 1.4.1