From b15a902f6d3b4efb71fed8f9c000fdb6af0a2b32 Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Mon, 13 Nov 2023 11:18:21 +0100 Subject: [DYNAREC] Don't consume X_PEND if opcode MAY emit flags --- src/dynarec/dynarec_native.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/dynarec/dynarec_native.c b/src/dynarec/dynarec_native.c index 2aade27f..98486d55 100644 --- a/src/dynarec/dynarec_native.c +++ b/src/dynarec/dynarec_native.c @@ -356,11 +356,11 @@ static int updateNeed(dynarec_native_t* dyn, int ninst, uint8_t need) { dyn->insts[ninst].x64.gen_flags |= X_PEND; dyn->insts[ninst].x64.need_after = need; need = dyn->insts[ninst].x64.need_after&~dyn->insts[ninst].x64.gen_flags; + if(dyn->insts[ninst].x64.may_set) need |= dyn->insts[ninst].x64.gen_flags; // forward the flags - // Consume X_PEND if relevant - if((need&X_PEND) && (dyn->insts[ninst].x64.set_flags&SF_PENDING)) - need &=~X_PEND; + else if((need&X_PEND) && (dyn->insts[ninst].x64.set_flags&SF_PENDING)) + need &=~X_PEND; // Consume X_PEND if relevant need |= dyn->insts[ninst].x64.use_flags; if(dyn->insts[ninst].x64.need_before == need) return ninst - 1; -- cgit 1.4.1