about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--src/dynarec/arm64/dynarec_arm64_arch.c14
-rw-r--r--src/dynarec/dynarec.c7
-rw-r--r--src/dynarec/dynarec_arch.h3
-rw-r--r--src/dynarec/dynarec_native.c3
-rw-r--r--src/libtools/signal32.c41
-rw-r--r--src/libtools/signals.c166
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)