diff options
Diffstat (limited to 'src')
| -rwxr-xr-x | src/dynarec/arm64/dynarec_arm64_00.c | 3 | ||||
| -rwxr-xr-x | src/dynarec/arm64/dynarec_arm64_pass2.h | 2 | ||||
| -rwxr-xr-x | src/dynarec/arm64/dynarec_arm64_pass3.h | 12 |
3 files changed, 11 insertions, 6 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_00.c b/src/dynarec/arm64/dynarec_arm64_00.c index e56f3572..583d734a 100755 --- a/src/dynarec/arm64/dynarec_arm64_00.c +++ b/src/dynarec/arm64/dynarec_arm64_00.c @@ -2281,6 +2281,9 @@ uintptr_t dynarec64_00(dynarec_arm_t* dyn, uintptr_t addr, uintptr_t ip, int nin LDRx_U12(x4, x4, 0); } STPx_S7_preindex(x4, x2, xSP, -16); + } else { + *ok = 0; + *need_epilog = 0; } if(addr+i32==0) { // self modifying code maybe? so use indirect address fetching TABLE64(x4, addr-4); diff --git a/src/dynarec/arm64/dynarec_arm64_pass2.h b/src/dynarec/arm64/dynarec_arm64_pass2.h index 0b063d7d..57a37572 100755 --- a/src/dynarec/arm64/dynarec_arm64_pass2.h +++ b/src/dynarec/arm64/dynarec_arm64_pass2.h @@ -6,7 +6,7 @@ } #define MESSAGE(A, ...) -#define EMIT(A) dyn->insts[ninst].size+=4; dyn->native_size+=4 +#define EMIT(A) do{dyn->insts[ninst].size+=4; dyn->native_size+=4;}while(0) #define NEW_INST \ if(ninst) { \ dyn->insts[ninst].address = (dyn->insts[ninst-1].address+dyn->insts[ninst-1].size); \ diff --git a/src/dynarec/arm64/dynarec_arm64_pass3.h b/src/dynarec/arm64/dynarec_arm64_pass3.h index 72f580f1..0f285a60 100755 --- a/src/dynarec/arm64/dynarec_arm64_pass3.h +++ b/src/dynarec/arm64/dynarec_arm64_pass3.h @@ -3,11 +3,13 @@ if(ninst) \ addInst(dyn->instsize, &dyn->insts_size, dyn->insts[ninst].x64.size, dyn->insts[ninst].size/4); \ addInst(dyn->instsize, &dyn->insts_size, 0, 0); -#define EMIT(A) \ - if(box64_dynarec_dump) {dynarec_log(LOG_NONE, "\t%08x\t%s\n", (uint32_t)(A), arm64_print(A, (uintptr_t)dyn->block));} \ - *(uint32_t*)(dyn->block) = (uint32_t)(A); \ - dyn->block += 4; dyn->native_size += 4; \ - dyn->insts[ninst].size2 += 4 +#define EMIT(A) \ + do{ \ + if(box64_dynarec_dump) {dynarec_log(LOG_NONE, "\t%08x\t%s\n", (uint32_t)(A), arm64_print(A, (uintptr_t)dyn->block));} \ + *(uint32_t*)(dyn->block) = (uint32_t)(A); \ + dyn->block += 4; dyn->native_size += 4; \ + dyn->insts[ninst].size2 += 4; \ + }while(0) #define MESSAGE(A, ...) if(box64_dynarec_dump) dynarec_log(LOG_NONE, __VA_ARGS__) #define NEW_INST \ |