From e84f2e4a8beac7c781615f3b470c81e6f58f953b Mon Sep 17 00:00:00 2001 From: ptitSeb Date: Tue, 24 Dec 2024 11:30:32 +0100 Subject: [ARM64_DYNAREC] a bit more work on df=0 (still WIP) --- src/dynarec/arm64/dynarec_arm64_emit_math.c | 2 +- src/dynarec/arm64/dynarec_arm64_pass0.h | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/dynarec/arm64/dynarec_arm64_emit_math.c b/src/dynarec/arm64/dynarec_arm64_emit_math.c index 91e7a932..531964fb 100644 --- a/src/dynarec/arm64/dynarec_arm64_emit_math.c +++ b/src/dynarec/arm64/dynarec_arm64_emit_math.c @@ -224,7 +224,7 @@ void emit_sub32(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int s2, int s3 void emit_sub32c(dynarec_arm_t* dyn, int ninst, rex_t rex, int s1, int64_t c, int s3, int s4, int s5) { MAYUSE(s5); - if(s1==xRSP && (!dyn->insts || dyn->insts[ninst].x64.gen_flags==X_PEND)) + if(s1==xRSP && (box64_dynarec_safeflags<2) && (!dyn->insts || (dyn->insts[ninst].x64.gen_flags==X_PEND) || (!box64_dynarec_df && (dyn->insts[ninst].x64.gen_flags==X_ALL)))) { // special case when doing math on RSP and only PEND is needed: ignoring it! if(c>=0 && c<0x1000) { diff --git a/src/dynarec/arm64/dynarec_arm64_pass0.h b/src/dynarec/arm64/dynarec_arm64_pass0.h index 83382629..e9d7bb7e 100644 --- a/src/dynarec/arm64/dynarec_arm64_pass0.h +++ b/src/dynarec/arm64/dynarec_arm64_pass0.h @@ -9,6 +9,7 @@ #define MAYSETFLAGS() dyn->insts[ninst].x64.may_set = 1 #define READFLAGS(A) \ dyn->insts[ninst].x64.use_flags = A; dyn->f.dfnone = 1;\ + if(!box64_dynarec_df && (A)&X_PEND) dyn->insts[ninst].x64.use_flags = X_ALL; \ dyn->f.pending=SF_SET #define SETFLAGS(A,B) \ dyn->insts[ninst].x64.set_flags = A; \ -- cgit 1.4.1