about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorAndré Zwing <nerv@dawncrow.de>2025-05-12 18:28:38 +0200
committerAndré Zwing <nerv@dawncrow.de>2025-05-19 23:46:29 +0200
commite07ec82344dd8d87c1a246bb9cfb4d74b8450842 (patch)
treeaddcceac09adafe4d92980dcbc753c23f4be0627 /src
parent37eb5492ba5d58672620d77e01b1bd497cce00d9 (diff)
downloadbox64-e07ec82344dd8d87c1a246bb9cfb4d74b8450842.tar.gz
box64-e07ec82344dd8d87c1a246bb9cfb4d74b8450842.zip
[WOW64] Implement BTCpuSimulate
Diffstat (limited to 'src')
-rw-r--r--src/dynarec/arm64/arm64_epilog.S3
-rw-r--r--src/dynarec/arm64/arm64_next.S3
-rw-r--r--src/emu/x64emu_private.h3
3 files changed, 9 insertions, 0 deletions
diff --git a/src/dynarec/arm64/arm64_epilog.S b/src/dynarec/arm64/arm64_epilog.S
index 57f23200..4a15895b 100644
--- a/src/dynarec/arm64/arm64_epilog.S
+++ b/src/dynarec/arm64/arm64_epilog.S
@@ -19,6 +19,9 @@ arm64_epilog:
     stp     x24, x25, [x0, (8 * 14)]
     stp     x26, x27, [x0, (8 * 16)] // put back reg value in emu, including EIP (so x27 must be EIP now)
     //restore all used register
+#ifdef _WIN32
+    ldr     x18, [x0, 3120]
+#endif
     add     sp, x28, 0
     //vpop     {d8-d15}
     ldp     x19, x20, [sp, (8 * 0)]
diff --git a/src/dynarec/arm64/arm64_next.S b/src/dynarec/arm64/arm64_next.S
index e900fbec..950b7dd3 100644
--- a/src/dynarec/arm64/arm64_next.S
+++ b/src/dynarec/arm64/arm64_next.S
@@ -22,6 +22,9 @@ arm64_next:
     stp     x16, x17, [sp, (8 *  8)]
     stp     x18, x27, [sp, (8 * 10)]    // also save x27(rip) to allow change in LinkNext
 
+#ifdef _WIN32
+    ldr     x18, [x0, 3120]
+#endif
     mov     x2, x30      // "from" is in lr, so put in x2
     add     x3, sp, 8*11    // x3 is address to change rip
     // call the function
diff --git a/src/emu/x64emu_private.h b/src/emu/x64emu_private.h
index 21f270f1..15e85fa4 100644
--- a/src/emu/x64emu_private.h
+++ b/src/emu/x64emu_private.h
@@ -124,6 +124,9 @@ typedef struct x64emu_s {
     uintptr_t   old_savedsp;
     #endif
 
+    #ifdef _WIN32
+    uint64_t    win64_teb;
+    #endif
     int         type;       // EMUTYPE_xxx define
     #ifdef BOX32
     int         libc_err;   // copy of errno from libc