diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2022-10-25 18:34:38 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2022-10-25 18:34:38 +0200 |
| commit | 067dcbc0f75533761b430d58724df2489a678f5c (patch) | |
| tree | bd4e131ee6ba3356fc5edf47078eaa5d3020575e /src/dynarec/dynarec_native_pass.c | |
| parent | 280bc969cef557e2e8e2cc18b4a2757cc58428d7 (diff) | |
| download | box64-067dcbc0f75533761b430d58724df2489a678f5c.tar.gz box64-067dcbc0f75533761b430d58724df2489a678f5c.zip | |
[DYNAREC] Added BIGBLOCK=3 level
Diffstat (limited to 'src/dynarec/dynarec_native_pass.c')
| -rwxr-xr-x | src/dynarec/dynarec_native_pass.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/dynarec/dynarec_native_pass.c b/src/dynarec/dynarec_native_pass.c index b095889a..86743179 100755 --- a/src/dynarec/dynarec_native_pass.c +++ b/src/dynarec/dynarec_native_pass.c @@ -18,6 +18,7 @@ #include "dynablock.h" #include "dynarec_native.h" #include "custommem.h" +#include "elfloader.h" #include "dynarec_arch.h" #include "dynarec_helper.h" @@ -43,6 +44,7 @@ uintptr_t native_pass(dynarec_native_t* dyn, uintptr_t addr) fpu_reset(dyn); int reset_n = -1; dyn->last_ip = (dyn->insts && dyn->insts[0].pred_sz)?0:ip; // RIP is always set at start of block unless there is a predecessor! + int stopblock = 2+(FindElfAddress(my_context, addr)?0:1); // if block is in elf_memory, it can be extended with bligblocks==2, else it needs 3 // ok, go now INIT; while(ok) { @@ -217,7 +219,8 @@ uintptr_t native_pass(dynarec_native_t* dyn, uintptr_t addr) if(ok<0) {ok = 0; need_epilog=1;} ++ninst; #if STEP == 0 - if(ok && ((!isJumpTableDefault64((void*)addr) && (box64_dynarec_bigblock<2)) || (addr>=box64_nodynarec_start && addr<box64_nodynarec_end))) + if(ok && (((box64_dynarec_bigblock<stopblock) && !isJumpTableDefault64((void*)addr)) + || (addr>=box64_nodynarec_start && addr<box64_nodynarec_end))) #else if(ok && (ninst==dyn->size)) #endif |