diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2023-11-13 11:18:21 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2023-11-13 11:18:21 +0100 |
| commit | b15a902f6d3b4efb71fed8f9c000fdb6af0a2b32 (patch) | |
| tree | 5eceab47e6de8dcecc4b6624ace68495cec4c6ba /src | |
| parent | 4468d63145aa9057301d8fa813a32c31ab3db934 (diff) | |
| download | box64-b15a902f6d3b4efb71fed8f9c000fdb6af0a2b32.tar.gz box64-b15a902f6d3b4efb71fed8f9c000fdb6af0a2b32.zip | |
[DYNAREC] Don't consume X_PEND if opcode MAY emit flags
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/dynarec_native.c | 6 |
1 files changed, 3 insertions, 3 deletions
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; |