about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2023-04-02 11:31:04 +0000
committerptitSeb <sebastien.chev@gmail.com>2023-04-02 11:31:04 +0000
commitabf6e4856c62db53eba7b5a06e9a83d234cad8c8 (patch)
treea7f312135a6289e16e8dd8a51997545e437ca52c /src
parent518e6782d87eb2923fef7f36e49992d0aa195182 (diff)
downloadbox64-abf6e4856c62db53eba7b5a06e9a83d234cad8c8.tar.gz
box64-abf6e4856c62db53eba7b5a06e9a83d234cad8c8.zip
[TRACE] Improved trace with xmm registers
Diffstat (limited to 'src')
-rwxr-xr-xsrc/emu/x64emu.c10
-rwxr-xr-xsrc/emu/x64emu_private.h3
2 files changed, 11 insertions, 2 deletions
diff --git a/src/emu/x64emu.c b/src/emu/x64emu.c
index eca8ee1d..2e869225 100755
--- a/src/emu/x64emu.c
+++ b/src/emu/x64emu.c
@@ -413,8 +413,14 @@ const char* DumpCPURegs(x64emu_t* emu, uintptr_t ip)
     }
     if(trace_xmm) {
         // do xmm reg if needed
-        for(int i=0; i<8; ++i) {
-            sprintf(tmp, "%d:%016lx%016lx", i, emu->xmm[i].q[1], emu->xmm[i].q[0]);
+        for(int i=0; i<16; ++i) {
+            if (trace_regsdiff && (emu->old_xmm[i].q[0] != emu->xmm[i].q[0] || emu->old_xmm[i].q[1] != emu->xmm[i].q[1])) {
+                sprintf(tmp, "\e[1;35m%02d:%016lx-%016lx\e[m", i, emu->xmm[i].q[1], emu->xmm[i].q[0]);
+                emu->old_xmm[i].q[0] = emu->xmm[i].q[0];
+                emu->old_xmm[i].q[1] = emu->xmm[i].q[1];
+            } else {
+                sprintf(tmp, "%02d:%016lx-%016lx", i, emu->xmm[i].q[1], emu->xmm[i].q[0]);
+            }
             strcat(buff, tmp);
             if ((i&3)==3) strcat(buff, "\n"); else strcat(buff, " ");
         }
diff --git a/src/emu/x64emu_private.h b/src/emu/x64emu_private.h
index a398d34e..9e7b599e 100755
--- a/src/emu/x64emu_private.h
+++ b/src/emu/x64emu_private.h
@@ -89,6 +89,9 @@ typedef struct x64emu_s {
     int         quitonexit;     // quit if exit/_exit is called
     int         longjmp;        // if quit because of longjmp
     x64test_t   test;       // used for dynarec testing
+    #ifdef HAVE_TRACE
+    sse_regs_t  old_xmm[16];
+    #endif
     // scratch stack, used for alignement of double and 64bits ints on arm. 200 elements should be enough
     uint64_t    scratch[200];
     // local stack, do be deleted when emu is freed