diff options
| -rw-r--r-- | src/dynarec/arm64/dynarec_arm64_arch.c | 14 | ||||
| -rw-r--r-- | src/dynarec/dynarec.c | 7 | ||||
| -rw-r--r-- | src/dynarec/dynarec_arch.h | 3 | ||||
| -rw-r--r-- | src/dynarec/dynarec_native.c | 3 | ||||
| -rw-r--r-- | src/libtools/signal32.c | 41 | ||||
| -rw-r--r-- | src/libtools/signals.c | 166 |
6 files changed, 54 insertions, 180 deletions
diff --git a/src/dynarec/arm64/dynarec_arm64_arch.c b/src/dynarec/arm64/dynarec_arm64_arch.c index f9a45425..fae233ce 100644 --- a/src/dynarec/arm64/dynarec_arm64_arch.c +++ b/src/dynarec/arm64/dynarec_arm64_arch.c @@ -157,13 +157,13 @@ void adjust_arch(dynablock_t* db, x64emu_t* emu, ucontext_t* p, uintptr_t x64pc) if(!db->arch_size || !db->arch) return; int ninst = getX64AddressInst(db, x64pc); -//printf_log(LOG_INFO, "adjust_arch(...), db=%p, x64pc=%p, nints=%d", db, (void*)x64pc, ninst); + dynarec_log(LOG_INFO, "adjust_arch(...), db=%p, x64pc=%p, nints=%d", db, (void*)x64pc, ninst); if(ninst<0) { -//printf_log(LOG_INFO, "\n"); + dynarec_log(LOG_INFO, "\n"); return; } if(ninst==0) { -//printf_log(LOG_INFO, "\n"); + dynarec_log(LOG_INFO, "\n"); CHECK_FLAGS(emu); return; } @@ -174,14 +174,14 @@ void adjust_arch(dynablock_t* db, x64emu_t* emu, ucontext_t* p, uintptr_t x64pc) while(i<ninst-1) { arch = next; i += 1+arch->seq; -//printf_log(LOG_INFO, "[ seq=%d%s%s%s%s%s ] ", arch->seq, arch->flags?" Flags":"", arch->x87?" x87":"", arch->mmx?" MMX":"", arch->sse?" SSE":"", arch->ymm?" YMM":""); + dynarec_log(LOG_INFO, "[ seq=%d%s%s%s%s%s ] ", arch->seq, arch->flags?" Flags":"", arch->x87?" x87":"", arch->mmx?" MMX":"", arch->sse?" SSE":"", arch->ymm?" YMM":""); next = (arch_arch_t*)((uintptr_t)next + sizeof_arch(arch)); } int sz = sizeof(arch_arch_t); if(arch->flags) { arch_flags_t* flags = (arch_flags_t*)((uintptr_t)arch + sz); sz += sizeof(arch_flags_t); -//printf_log(LOG_INFO, " flags[%s-%s%s%s%s] ", flags->defered?"defered":"", flags->nf?"S":"", flags->vf?"O":"", flags->eq?"Z":"", flags->cf?(flags->inv_cf?"C(inv)":"C"):""); + dynarec_log(LOG_INFO, " flags[%s-%s%s%s%s] ", flags->defered?"defered":"", flags->nf?"S":"", flags->vf?"O":"", flags->eq?"Z":"", flags->cf?(flags->inv_cf?"C(inv)":"C"):""); if(flags->defered) { CHECK_FLAGS(emu); //return; @@ -216,7 +216,7 @@ void adjust_arch(dynablock_t* db, x64emu_t* emu, ucontext_t* p, uintptr_t x64pc) } if(arch->sse) { arch_sse_t* sse = (arch_sse_t*)((uintptr_t)arch + sz); -//printf_log(LOG_INFO, " sse[%x (fpsimd=%p)] ", sse->sse, fpsimd); + dynarec_log(LOG_INFO, " sse[%x (fpsimd=%p)] ", sse->sse, fpsimd); sz += sizeof(arch_sse_t); for(int i=0; i<16; ++i) if(fpsimd && (sse->sse>>i)&1) { @@ -229,5 +229,5 @@ void adjust_arch(dynablock_t* db, x64emu_t* emu, ucontext_t* p, uintptr_t x64pc) emu->xmm[i].u128 = fpsimd->vregs[idx]; } } -//printf_log(LOG_INFO, "\n"); + dynarec_log(LOG_INFO, "\n"); } \ No newline at end of file diff --git a/src/dynarec/dynarec.c b/src/dynarec/dynarec.c index 1e744b8f..f6e61db8 100644 --- a/src/dynarec/dynarec.c +++ b/src/dynarec/dynarec.c @@ -210,7 +210,12 @@ void DynaRun(x64emu_t* emu) skip = 0; // no block, of block doesn't have DynaRec content (yet, temp is not null) // Use interpreter (should use single instruction step...) - dynarec_log(LOG_DEBUG, "%04d|Running Interpreter @%p, emu=%p\n", GetTID(), (void*)R_RIP, emu); + if(box64_dynarec_log) { + if(ACCESS_FLAG(F_TF)) + dynarec_log(LOG_INFO, "%04d|Running Interpreter @%p, emu=%p because TF is on\n", GetTID(), (void*)R_RIP, emu); + else + dynarec_log(LOG_DEBUG, "%04d|Running Interpreter @%p, emu=%p\n", GetTID(), (void*)R_RIP, emu); + } if(box64_dynarec_test) emu->test.clean = 0; Run(emu, 1); diff --git a/src/dynarec/dynarec_arch.h b/src/dynarec/dynarec_arch.h index edc09650..1b619e1a 100644 --- a/src/dynarec/dynarec_arch.h +++ b/src/dynarec/dynarec_arch.h @@ -28,6 +28,7 @@ #define ARCH_SIZE(A) get_size_arch(A) #define ARCH_FILL(A, B) populate_arch(A, B) #define ARCH_ADJUST(A, B, C, D) adjust_arch(A, B, C, D) +#define STOP_NATIVE_FLAGS(A, B) A->insts[B].nat_flags_op = NAT_FLAG_OP_UNUSABLE #elif defined(LA64) #define instruction_native_t instruction_la64_t @@ -53,6 +54,7 @@ #define ARCH_SIZE(A) 0 #define ARCH_FILL(A, B) {} #define ARCH_ADJUST(A, B, C, D) {} +#define STOP_NATIVE_FLAGS(A, B) {} #elif defined(RV64) #define instruction_native_t instruction_rv64_t @@ -80,6 +82,7 @@ #define ARCH_SIZE(A) 0 #define ARCH_FILL(A, B) {} #define ARCH_ADJUST(A, B, C, D) {} +#define STOP_NATIVE_FLAGS(A, B) {} #else #error Unsupported platform #endif diff --git a/src/dynarec/dynarec_native.c b/src/dynarec/dynarec_native.c index 4ffd1048..36670bf0 100644 --- a/src/dynarec/dynarec_native.c +++ b/src/dynarec/dynarec_native.c @@ -379,9 +379,10 @@ static int updateNeed(dynarec_native_t* dyn, int ninst, uint8_t need) { while (ninst>=0) { // need pending but instruction is only a subset: remove pend and use an X_ALL instead need |= dyn->insts[ninst].x64.need_after; - if((need&X_PEND) && (dyn->insts[ninst].x64.state_flags==SF_SUBSET || dyn->insts[ninst].x64.state_flags==SF_SET || dyn->insts[ninst].x64.state_flags==SF_SET_NODF)) { + if((need&X_PEND) && ((dyn->insts[ninst].x64.state_flags==SF_SUBSET) || (dyn->insts[ninst].x64.state_flags==SF_SET) || (dyn->insts[ninst].x64.state_flags==SF_SET_NODF))) { need &=~X_PEND; need |= X_ALL; + STOP_NATIVE_FLAGS(dyn, ninst); } if((need&X_PEND) && dyn->insts[ninst].x64.state_flags==SF_SUBSET_PENDING) { need |= X_ALL&~(dyn->insts[ninst].x64.set_flags); diff --git a/src/libtools/signal32.c b/src/libtools/signal32.c index fc07d8aa..c2d37b3e 100644 --- a/src/libtools/signal32.c +++ b/src/libtools/signal32.c @@ -562,47 +562,6 @@ void my_sigactionhandler_oldcode_32(x64emu_t* emu, int32_t sig, int simple, sigi sigcontext->uc_mcontext.gregs[I386_SS] = R_SS; sigcontext->uc_mcontext.gregs[I386_FS] = R_FS; sigcontext->uc_mcontext.gregs[I386_GS] = R_GS; -#if defined(DYNAREC) -#if defined(ARM64) - if(db && p) { - sigcontext->uc_mcontext.gregs[I386_EAX] = p->uc_mcontext.regs[10]; - sigcontext->uc_mcontext.gregs[I386_ECX] = p->uc_mcontext.regs[11]; - sigcontext->uc_mcontext.gregs[I386_EDX] = p->uc_mcontext.regs[12]; - sigcontext->uc_mcontext.gregs[I386_EBX] = p->uc_mcontext.regs[13]; - sigcontext->uc_mcontext.gregs[I386_ESP] = p->uc_mcontext.regs[14]; - sigcontext->uc_mcontext.gregs[I386_EBP] = p->uc_mcontext.regs[15]; - sigcontext->uc_mcontext.gregs[I386_ESI] = p->uc_mcontext.regs[16]; - sigcontext->uc_mcontext.gregs[I386_EDI] = p->uc_mcontext.regs[17]; - sigcontext->uc_mcontext.gregs[I386_EIP] = getX64Address(db, (uintptr_t)pc); - } -#elif defined(LA64) - if(db && p) { - sigcontext->uc_mcontext.gregs[I386_EAX] = p->uc_mcontext.__gregs[12]; - sigcontext->uc_mcontext.gregs[I386_ECX] = p->uc_mcontext.__gregs[13]; - sigcontext->uc_mcontext.gregs[I386_EDX] = p->uc_mcontext.__gregs[14]; - sigcontext->uc_mcontext.gregs[I386_EBX] = p->uc_mcontext.__gregs[15]; - sigcontext->uc_mcontext.gregs[I386_ESP] = p->uc_mcontext.__gregs[16]; - sigcontext->uc_mcontext.gregs[I386_EBP] = p->uc_mcontext.__gregs[17]; - sigcontext->uc_mcontext.gregs[I386_ESI] = p->uc_mcontext.__gregs[18]; - sigcontext->uc_mcontext.gregs[I386_EDI] = p->uc_mcontext.__gregs[19]; - sigcontext->uc_mcontext.gregs[I386_EIP] = getX64Address(db, (uintptr_t)pc); - } -#elif defined(RV64) - if(db && p) { - sigcontext->uc_mcontext.gregs[I386_EAX] = p->uc_mcontext.__gregs[16]; - sigcontext->uc_mcontext.gregs[I386_ECX] = p->uc_mcontext.__gregs[13]; - sigcontext->uc_mcontext.gregs[I386_EDX] = p->uc_mcontext.__gregs[12]; - sigcontext->uc_mcontext.gregs[I386_EBX] = p->uc_mcontext.__gregs[24]; - sigcontext->uc_mcontext.gregs[I386_ESP] = p->uc_mcontext.__gregs[9]; - sigcontext->uc_mcontext.gregs[I386_EBP] = p->uc_mcontext.__gregs[8]; - sigcontext->uc_mcontext.gregs[I386_ESI] = p->uc_mcontext.__gregs[11]; - sigcontext->uc_mcontext.gregs[I386_EDI] = p->uc_mcontext.__gregs[10]; - sigcontext->uc_mcontext.gregs[I386_EIP] = getX64Address(db, (uintptr_t)pc); - } -#else -#error Unsupported architecture -#endif -#endif // get FloatPoint status sigcontext->uc_mcontext.fpregs = to_ptrv(xstate);//(struct x64_libc_fpstate*)&sigcontext->xstate; fpu_xsave_mask(emu, xstate, 1, 0b111); diff --git a/src/libtools/signals.c b/src/libtools/signals.c index a61ef4b6..b5da1833 100644 --- a/src/libtools/signals.c +++ b/src/libtools/signals.c @@ -611,41 +611,41 @@ void copyUCTXreg2Emu(x64emu_t* emu, ucontext_t* p, uintptr_t ip) { emu->ip.q[0] = ip; emu->eflags.x64 = p->uc_mcontext.regs[26]; #elif defined(LA64) - emu->regs[_AX].q[0] = p->uc_mcontext.__gregs[12]; - emu->regs[_CX].q[0] = p->uc_mcontext.__gregs[13]; - emu->regs[_DX].q[0] = p->uc_mcontext.__gregs[14]; - emu->regs[_BX].q[0] = p->uc_mcontext.__gregs[15]; - emu->regs[_SP].q[0] = p->uc_mcontext.__gregs[16]; - emu->regs[_BP].q[0] = p->uc_mcontext.__gregs[17]; - emu->regs[_SI].q[0] = p->uc_mcontext.__gregs[18]; - emu->regs[_DI].q[0] = p->uc_mcontext.__gregs[19]; - emu->regs[_R8].q[0] = p->uc_mcontext.__gregs[23]; - emu->regs[_R9].q[0] = p->uc_mcontext.__gregs[24]; - emu->regs[_R10].q[0] = p->uc_mcontext.__gregs[25]; - emu->regs[_R11].q[0] = p->uc_mcontext.__gregs[26]; - emu->regs[_R12].q[0] = p->uc_mcontext.__gregs[27]; - emu->regs[_R13].q[0] = p->uc_mcontext.__gregs[28]; - emu->regs[_R14].q[0] = p->uc_mcontext.__gregs[29]; - emu->regs[_R15].q[0] = p->uc_mcontext.__gregs[30]; - emu->ip.q[0] = ip; - emu->eflags.x64 = p->uc_mcontext.__gregs[31]; + emu->regs[_AX].q[0] = p->uc_mcontext.__gregs[12]; + emu->regs[_CX].q[0] = p->uc_mcontext.__gregs[13]; + emu->regs[_DX].q[0] = p->uc_mcontext.__gregs[14]; + emu->regs[_BX].q[0] = p->uc_mcontext.__gregs[15]; + emu->regs[_SP].q[0] = p->uc_mcontext.__gregs[16]; + emu->regs[_BP].q[0] = p->uc_mcontext.__gregs[17]; + emu->regs[_SI].q[0] = p->uc_mcontext.__gregs[18]; + emu->regs[_DI].q[0] = p->uc_mcontext.__gregs[19]; + emu->regs[_R8].q[0] = p->uc_mcontext.__gregs[23]; + emu->regs[_R9].q[0] = p->uc_mcontext.__gregs[24]; + emu->regs[_R10].q[0] = p->uc_mcontext.__gregs[25]; + emu->regs[_R11].q[0] = p->uc_mcontext.__gregs[26]; + emu->regs[_R12].q[0] = p->uc_mcontext.__gregs[27]; + emu->regs[_R13].q[0] = p->uc_mcontext.__gregs[28]; + emu->regs[_R14].q[0] = p->uc_mcontext.__gregs[29]; + emu->regs[_R15].q[0] = p->uc_mcontext.__gregs[30]; + emu->ip.q[0] = ip; + emu->eflags.x64 = p->uc_mcontext.__gregs[31]; #elif defined(RV64) - emu->regs[_AX].q[0] = p->uc_mcontext.__gregs[16]; - emu->regs[_CX].q[0] = p->uc_mcontext.__gregs[13]; - emu->regs[_DX].q[0] = p->uc_mcontext.__gregs[12]; - emu->regs[_BX].q[0] = p->uc_mcontext.__gregs[24]; - emu->regs[_SP].q[0] = p->uc_mcontext.__gregs[9]; - emu->regs[_BP].q[0] = p->uc_mcontext.__gregs[8]; - emu->regs[_SI].q[0] = p->uc_mcontext.__gregs[11]; - emu->regs[_DI].q[0] = p->uc_mcontext.__gregs[10]; - emu->regs[_R8].q[0] = p->uc_mcontext.__gregs[14]; - emu->regs[_R9].q[0] = p->uc_mcontext.__gregs[15]; - emu->regs[_R10].q[0] = p->uc_mcontext.__gregs[26]; - emu->regs[_R11].q[0] = p->uc_mcontext.__gregs[27]; - emu->regs[_R12].q[0] = p->uc_mcontext.__gregs[18]; - emu->regs[_R13].q[0] = p->uc_mcontext.__gregs[19]; - emu->regs[_R14].q[0] = p->uc_mcontext.__gregs[20]; - emu->regs[_R15].q[0] = p->uc_mcontext.__gregs[21]; + emu->regs[_AX].q[0] = p->uc_mcontext.__gregs[16]; + emu->regs[_CX].q[0] = p->uc_mcontext.__gregs[13]; + emu->regs[_DX].q[0] = p->uc_mcontext.__gregs[12]; + emu->regs[_BX].q[0] = p->uc_mcontext.__gregs[24]; + emu->regs[_SP].q[0] = p->uc_mcontext.__gregs[9]; + emu->regs[_BP].q[0] = p->uc_mcontext.__gregs[8]; + emu->regs[_SI].q[0] = p->uc_mcontext.__gregs[11]; + emu->regs[_DI].q[0] = p->uc_mcontext.__gregs[10]; + emu->regs[_R8].q[0] = p->uc_mcontext.__gregs[14]; + emu->regs[_R9].q[0] = p->uc_mcontext.__gregs[15]; + emu->regs[_R10].q[0] = p->uc_mcontext.__gregs[26]; + emu->regs[_R11].q[0] = p->uc_mcontext.__gregs[27]; + emu->regs[_R12].q[0] = p->uc_mcontext.__gregs[18]; + emu->regs[_R13].q[0] = p->uc_mcontext.__gregs[19]; + emu->regs[_R14].q[0] = p->uc_mcontext.__gregs[20]; + emu->regs[_R15].q[0] = p->uc_mcontext.__gregs[21]; emu->ip.q[0] = ip; emu->eflags.x64 = p->uc_mcontext.__gregs[23]; #else @@ -1047,76 +1047,11 @@ void my_sigactionhandler_oldcode_64(x64emu_t* emu, int32_t sig, int simple, sigi sigcontext->uc_mcontext.gregs[X64_RBP] = R_RBP; sigcontext->uc_mcontext.gregs[X64_RSP] = R_RSP; sigcontext->uc_mcontext.gregs[X64_RBX] = R_RBX; - sigcontext->uc_mcontext.gregs[X64_RIP] = R_RIP;//emu->old_ip; // old_ip should be more accurate as the "current" IP, but it's not always up-to-date + sigcontext->uc_mcontext.gregs[X64_RIP] = R_RIP; // flags sigcontext->uc_mcontext.gregs[X64_EFL] = emu->eflags.x64; // get segments sigcontext->uc_mcontext.gregs[X64_CSGSFS] = ((uint64_t)(R_CS)) | (((uint64_t)(R_GS))<<16) | (((uint64_t)(R_FS))<<32); -#if defined(DYNAREC) -#if defined(ARM64) - if(db && p) { - sigcontext->uc_mcontext.gregs[X64_RAX] = p->uc_mcontext.regs[10]; - sigcontext->uc_mcontext.gregs[X64_RCX] = p->uc_mcontext.regs[11]; - sigcontext->uc_mcontext.gregs[X64_RDX] = p->uc_mcontext.regs[12]; - sigcontext->uc_mcontext.gregs[X64_RBX] = p->uc_mcontext.regs[13]; - sigcontext->uc_mcontext.gregs[X64_RSP] = p->uc_mcontext.regs[14]; - sigcontext->uc_mcontext.gregs[X64_RBP] = p->uc_mcontext.regs[15]; - sigcontext->uc_mcontext.gregs[X64_RSI] = p->uc_mcontext.regs[16]; - sigcontext->uc_mcontext.gregs[X64_RDI] = p->uc_mcontext.regs[17]; - sigcontext->uc_mcontext.gregs[X64_R8] = p->uc_mcontext.regs[18]; - sigcontext->uc_mcontext.gregs[X64_R9] = p->uc_mcontext.regs[19]; - sigcontext->uc_mcontext.gregs[X64_R10] = p->uc_mcontext.regs[20]; - sigcontext->uc_mcontext.gregs[X64_R11] = p->uc_mcontext.regs[21]; - sigcontext->uc_mcontext.gregs[X64_R12] = p->uc_mcontext.regs[22]; - sigcontext->uc_mcontext.gregs[X64_R13] = p->uc_mcontext.regs[23]; - sigcontext->uc_mcontext.gregs[X64_R14] = p->uc_mcontext.regs[24]; - sigcontext->uc_mcontext.gregs[X64_R15] = p->uc_mcontext.regs[25]; - sigcontext->uc_mcontext.gregs[X64_RIP] = getX64Address(db, (uintptr_t)pc); - } -#elif defined(LA64) - if(db && p) { - sigcontext->uc_mcontext.gregs[X64_RAX] = p->uc_mcontext.__gregs[12]; - sigcontext->uc_mcontext.gregs[X64_RCX] = p->uc_mcontext.__gregs[13]; - sigcontext->uc_mcontext.gregs[X64_RDX] = p->uc_mcontext.__gregs[14]; - sigcontext->uc_mcontext.gregs[X64_RBX] = p->uc_mcontext.__gregs[15]; - sigcontext->uc_mcontext.gregs[X64_RSP] = p->uc_mcontext.__gregs[16]; - sigcontext->uc_mcontext.gregs[X64_RBP] = p->uc_mcontext.__gregs[17]; - sigcontext->uc_mcontext.gregs[X64_RSI] = p->uc_mcontext.__gregs[18]; - sigcontext->uc_mcontext.gregs[X64_RDI] = p->uc_mcontext.__gregs[19]; - sigcontext->uc_mcontext.gregs[X64_R8] = p->uc_mcontext.__gregs[23]; - sigcontext->uc_mcontext.gregs[X64_R9] = p->uc_mcontext.__gregs[24]; - sigcontext->uc_mcontext.gregs[X64_R10] = p->uc_mcontext.__gregs[25]; - sigcontext->uc_mcontext.gregs[X64_R11] = p->uc_mcontext.__gregs[26]; - sigcontext->uc_mcontext.gregs[X64_R12] = p->uc_mcontext.__gregs[27]; - sigcontext->uc_mcontext.gregs[X64_R13] = p->uc_mcontext.__gregs[28]; - sigcontext->uc_mcontext.gregs[X64_R14] = p->uc_mcontext.__gregs[29]; - sigcontext->uc_mcontext.gregs[X64_R15] = p->uc_mcontext.__gregs[30]; - sigcontext->uc_mcontext.gregs[X64_RIP] = getX64Address(db, (uintptr_t)pc); - } -#elif defined(RV64) - if(db && p) { - sigcontext->uc_mcontext.gregs[X64_RAX] = p->uc_mcontext.__gregs[16]; - sigcontext->uc_mcontext.gregs[X64_RCX] = p->uc_mcontext.__gregs[13]; - sigcontext->uc_mcontext.gregs[X64_RDX] = p->uc_mcontext.__gregs[12]; - sigcontext->uc_mcontext.gregs[X64_RBX] = p->uc_mcontext.__gregs[24]; - sigcontext->uc_mcontext.gregs[X64_RSP] = p->uc_mcontext.__gregs[9]; - sigcontext->uc_mcontext.gregs[X64_RBP] = p->uc_mcontext.__gregs[8]; - sigcontext->uc_mcontext.gregs[X64_RSI] = p->uc_mcontext.__gregs[11]; - sigcontext->uc_mcontext.gregs[X64_RDI] = p->uc_mcontext.__gregs[10]; - sigcontext->uc_mcontext.gregs[X64_R8] = p->uc_mcontext.__gregs[14]; - sigcontext->uc_mcontext.gregs[X64_R9] = p->uc_mcontext.__gregs[15]; - sigcontext->uc_mcontext.gregs[X64_R10] = p->uc_mcontext.__gregs[26]; - sigcontext->uc_mcontext.gregs[X64_R11] = p->uc_mcontext.__gregs[27]; - sigcontext->uc_mcontext.gregs[X64_R12] = p->uc_mcontext.__gregs[18]; - sigcontext->uc_mcontext.gregs[X64_R13] = p->uc_mcontext.__gregs[19]; - sigcontext->uc_mcontext.gregs[X64_R14] = p->uc_mcontext.__gregs[20]; - sigcontext->uc_mcontext.gregs[X64_R15] = p->uc_mcontext.__gregs[21]; - sigcontext->uc_mcontext.gregs[X64_RIP] = getX64Address(db, (uintptr_t)pc); - } -#else -#error Unsupported architecture -#endif -#endif if(R_CS==0x23) { // trucate regs to 32bits, just in case #define GO(R) sigcontext->uc_mcontext.gregs[X64_R##R]&=0xFFFFFFFF @@ -1571,36 +1506,7 @@ void my_box64signalhandler(int32_t sig, siginfo_t* info, void * ucntx) adjustregs(emu); if(db && db->arch_size) ARCH_ADJUST(db, emu, p, x64pc); -#ifdef ARM64 - //TODO: Need proper SIMD/x87 register traking! - /*if(fpsimd) { - emu->xmm[0].u128 = fpsimd->vregs[0]; - emu->xmm[1].u128 = fpsimd->vregs[1]; - emu->xmm[2].u128 = fpsimd->vregs[2]; - emu->xmm[3].u128 = fpsimd->vregs[3]; - }*/ -#elif defined(LA64) - /*if(fpsimd) { - emu->xmm[0].u128 = fpsimd->vregs[0]; - emu->xmm[1].u128 = fpsimd->vregs[1]; - emu->xmm[2].u128 = fpsimd->vregs[2]; - emu->xmm[3].u128 = fpsimd->vregs[3]; - }*/ -#elif defined(RV64) - /*if(fpsimd) { - emu->xmm[0].u128 = fpsimd->vregs[0]; - emu->xmm[1].u128 = fpsimd->vregs[1]; - emu->xmm[2].u128 = fpsimd->vregs[2]; - emu->xmm[3].u128 = fpsimd->vregs[3]; - }*/ -#else -#error Unsupported architecture -#endif - if(addr>=db->x64_addr && addr<(db->x64_addr+db->x64_size)) { - dynarec_log(LOG_INFO, "Auto-SMC detected, getting out of current Dynablock (%p, x64addr=%p, need_test=%d/%d/%d)!\n", db, db->x64_addr, db_need_test, db->dirty, db->always_test); - } else { - dynarec_log(LOG_INFO, "Dynablock (%p, x64addr=%p, need_test=%d/%d/%d) unprotected, getting out at %p (%p)!\n", db, db->x64_addr, db_need_test, db->dirty, db->always_test, (void*)R_RIP, (void*)addr); - } + dynarec_log(LOG_INFO, "Dynablock (%p, x64addr=%p, need_test=%d/%d/%d) %s, getting out at %p (%p)!\n", db, db->x64_addr, db_need_test, db->dirty, db->always_test, (addr>=db->x64_addr && addr<(db->x64_addr+db->x64_size))?"Auto-SMC":"unprotected", (void*)R_RIP, (void*)addr); //relockMutex(Locks); unlock_signal(); if(Locks & is_dyndump_locked) |