diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_functions.c | 2 | ||||
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_helper.h | 4 | ||||
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_private.h | 3 | ||||
| -rw-r--r-- | src/dynarec/la64/dynarec_la64_helper.h | 6 | ||||
| -rw-r--r-- | src/dynarec/la64/dynarec_la64_private.h | 3 | ||||
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_helper.h | 7 | ||||
| -rw-r--r-- | src/dynarec/rv64/dynarec_rv64_private.h | 3 |
7 files changed, 19 insertions, 9 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_functions.c b/src/dynarec/arm64/dynarec_arm64_functions.c index 46ee4450..8bf313a5 100644 --- a/src/dynarec/arm64/dynarec_arm64_functions.c +++ b/src/dynarec/arm64/dynarec_arm64_functions.c @@ -648,6 +648,8 @@ void inst_name_pass3(dynarec_native_t* dyn, int ninst, const char* name, rex_t r for(int ii=0; ii<dyn->insts[ninst].pred_sz; ++ii) dynarec_log(LOG_NONE, "%s%d", ii?"/":"", dyn->insts[ninst].pred[ii]); } + if(!dyn->insts[ninst].x64.alive) + dynarec_log(LOG_NONE, " not executed"); if(dyn->insts[ninst].x64.jmp && dyn->insts[ninst].x64.jmp_insts>=0) dynarec_log(LOG_NONE, ", jmp=%d", dyn->insts[ninst].x64.jmp_insts); if(dyn->insts[ninst].x64.jmp && dyn->insts[ninst].x64.jmp_insts==-1) diff --git a/src/dynarec/arm64/dynarec_arm64_helper.h b/src/dynarec/arm64/dynarec_arm64_helper.h index 96c13450..2b6102fb 100644 --- a/src/dynarec/arm64/dynarec_arm64_helper.h +++ b/src/dynarec/arm64/dynarec_arm64_helper.h @@ -1019,7 +1019,7 @@ x87_do_pop(dyn, ninst, scratch) #endif -#define SET_DFNONE(S) if(!dyn->f.dfnone) {STRw_U12(wZR, xEmu, offsetof(x64emu_t, df)); dyn->f.dfnone=1;} +#define SET_DFNONE(S) do {dyn->f.dfnone_here=1; if(!dyn->f.dfnone) {STRw_U12(wZR, xEmu, offsetof(x64emu_t, df)); dyn->f.dfnone=1;}} while(0); #define SET_DF(S, N) \ if((N)!=d_none) { \ MOVZw(S, (N)); \ @@ -1032,7 +1032,7 @@ dyn->f.dfnone=0; \ } else SET_DFNONE(S) #define SET_NODF() dyn->f.dfnone = 0 -#define SET_DFOK() dyn->f.dfnone = 1 +#define SET_DFOK() dyn->f.dfnone = 1; dyn->f.dfnone_here=1 #ifndef MAYSETFLAGS #define MAYSETFLAGS() diff --git a/src/dynarec/arm64/dynarec_arm64_private.h b/src/dynarec/arm64/dynarec_arm64_private.h index 963ecb9d..b86f1b11 100644 --- a/src/dynarec/arm64/dynarec_arm64_private.h +++ b/src/dynarec/arm64/dynarec_arm64_private.h @@ -63,7 +63,8 @@ typedef struct neoncache_s { typedef struct flagcache_s { int pending; // is there a pending flags here, or to check? - int dfnone; // if deferred flags is already set to df_none + uint8_t dfnone; // if deferred flags is already set to df_none + uint8_t dfnone_here;// defered flags is cleared in this opcode } flagcache_t; typedef struct instruction_arm64_s { diff --git a/src/dynarec/la64/dynarec_la64_helper.h b/src/dynarec/la64/dynarec_la64_helper.h index 1c921498..dd961740 100644 --- a/src/dynarec/la64/dynarec_la64_helper.h +++ b/src/dynarec/la64/dynarec_la64_helper.h @@ -552,10 +552,12 @@ LOAD_REG(R15); #define SET_DFNONE() \ + do { \ + dyn->f.dfnone_here=1; \ if (!dyn->f.dfnone) { \ ST_W(xZR, xEmu, offsetof(x64emu_t, df)); \ dyn->f.dfnone = 1; \ - } + } } while(0); #define SET_DF(S, N) \ if ((N) != d_none) { \ MOV32w(S, (N)); \ @@ -564,7 +566,7 @@ } else \ SET_DFNONE() #define SET_NODF() dyn->f.dfnone = 0 -#define SET_DFOK() dyn->f.dfnone = 1 +#define SET_DFOK() dyn->f.dfnone = 1; dyn->f.dfnone_here=1 #define CLEAR_FLAGS_(s) \ MOV64x(s, (1UL << F_AF) | (1UL << F_CF) | (1UL << F_OF) | (1UL << F_ZF) | (1UL << F_SF) | (1UL << F_PF)); ANDN(xFlags, xFlags, s); diff --git a/src/dynarec/la64/dynarec_la64_private.h b/src/dynarec/la64/dynarec_la64_private.h index 2dddd155..d4384646 100644 --- a/src/dynarec/la64/dynarec_la64_private.h +++ b/src/dynarec/la64/dynarec_la64_private.h @@ -62,7 +62,8 @@ typedef struct lsxcache_s { typedef struct flagcache_s { int pending; // is there a pending flags here, or to check? - int dfnone; // if deferred flags is already set to df_none + uint8_t dfnone; // if deferred flags is already set to df_none + uint8_t dfnone_here;// defered flags is cleared in this opcode } flagcache_t; typedef struct instruction_la64_s { diff --git a/src/dynarec/rv64/dynarec_rv64_helper.h b/src/dynarec/rv64/dynarec_rv64_helper.h index 93bd0566..9168c5e9 100644 --- a/src/dynarec/rv64/dynarec_rv64_helper.h +++ b/src/dynarec/rv64/dynarec_rv64_helper.h @@ -821,10 +821,13 @@ #define SET_DFNONE() \ + do { \ + dyn->f.dfnone_here=1; \ if (!dyn->f.dfnone) { \ SW(xZR, xEmu, offsetof(x64emu_t, df)); \ dyn->f.dfnone = 1; \ - } + } } while(0); + #define SET_DF(S, N) \ if ((N) != d_none) { \ MOV_U12(S, (N)); \ @@ -833,7 +836,7 @@ } else \ SET_DFNONE() #define SET_NODF() dyn->f.dfnone = 0 -#define SET_DFOK() dyn->f.dfnone = 1 +#define SET_DFOK() dyn->f.dfnone = 1; dyn->f.dfnone_here=1 #define CLEAR_FLAGS() \ IFX(X_ALL) { ANDI(xFlags, xFlags, ~((1UL << F_AF) | (1UL << F_CF) | (1UL << F_OF2) | (1UL << F_ZF) | (1UL << F_SF) | (1UL << F_PF))); } diff --git a/src/dynarec/rv64/dynarec_rv64_private.h b/src/dynarec/rv64/dynarec_rv64_private.h index 612e331c..b293f7a6 100644 --- a/src/dynarec/rv64/dynarec_rv64_private.h +++ b/src/dynarec/rv64/dynarec_rv64_private.h @@ -72,7 +72,8 @@ typedef struct extcache_s { typedef struct flagcache_s { int pending; // is there a pending flags here, or to check? - int dfnone; // if deferred flags is already set to df_none + uint8_t dfnone; // if deferred flags is already set to df_none + uint8_t dfnone_here;// defered flags is cleared in this opcode } flagcache_t; typedef struct instruction_rv64_s { |