From 8f855f5ddeb4de303085757b7c417b66665e1c3e Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Sun, 8 Sep 2024 14:18:03 +0200 Subject: [ARM64_DYNAREC] Avoid computing flags if they are just recomputed at jump point --- src/dynarec/arm64/dynarec_arm64_helper.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/dynarec/arm64/dynarec_arm64_helper.c b/src/dynarec/arm64/dynarec_arm64_helper.c index c33c9aa2..c332b40a 100644 --- a/src/dynarec/arm64/dynarec_arm64_helper.c +++ b/src/dynarec/arm64/dynarec_arm64_helper.c @@ -2332,8 +2332,17 @@ static void flagsCacheTransform(dynarec_arm_t* dyn, int ninst, int s1) case SF_SET_PENDING: if(dyn->f.pending!=SF_SET && dyn->f.pending!=SF_SET_PENDING - && dyn->f.pending!=SF_PENDING) - go = 1; + && dyn->f.pending!=SF_PENDING + ) { + // only sync if some previous flags are used or if all flags are not regenerated at the instuction + if(dyn->insts[jmp].x64.use_flags || (dyn->insts[jmp].x64.set_flags!=X_ALL)) + go = 1; + else if(go) { + // just clear df flags + go = 0; + STRw_U12(xZR, xEmu, offsetof(x64emu_t, df)); + } + } break; case SF_PENDING: if(dyn->f.pending!=SF_SET -- cgit 1.4.1