about summary refs log tree commit diff stats
path: root/src/dynarec/arm64_next.S
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-03-14 17:58:04 +0100
committerptitSeb <sebastien.chev@gmail.com>2021-03-14 17:58:04 +0100
commit4919f161cc7a0cfa31f91b0d1e2d0ff600044ff6 (patch)
treee89e9892fa166aa348b8c9f902de7428e875c7bc /src/dynarec/arm64_next.S
parent3dda84e58b148f92b2bb4d94caacc84011fa3919 (diff)
downloadbox64-4919f161cc7a0cfa31f91b0d1e2d0ff600044ff6.tar.gz
box64-4919f161cc7a0cfa31f91b0d1e2d0ff600044ff6.zip
[DYNAREC] Added Basic blocks for dynarec
Diffstat (limited to 'src/dynarec/arm64_next.S')
-rwxr-xr-xsrc/dynarec/arm64_next.S47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/dynarec/arm64_next.S b/src/dynarec/arm64_next.S
new file mode 100755
index 00000000..2410750c
--- /dev/null
+++ b/src/dynarec/arm64_next.S
@@ -0,0 +1,47 @@
+//arm update linker table for dynarec
+//called with pointer to emu as 1st parameter
+//and address of table to as 2nd parameter
+//ip is at r12
+
+.text
+.align 4
+
+.extern LinkNext
+
+.global arm64_next
+arm64_next:
+    // emu is r0
+    // don't put put back reg value in emu, faster but more tricky to debug
+    // IP address is r1
+    sub     sp,  sp, (8 * 11)
+    str     x0,  [sp, (8 *  0)]
+    str     x1,  [sp, (8 *  1)]
+    str     x10, [sp, (8 *  2)]
+    str     x11, [sp, (8 *  3)]
+    str     x12, [sp, (8 *  4)]
+    str     x13, [sp, (8 *  5)]
+    str     x14, [sp, (8 *  6)]
+    str     x15, [sp, (8 *  7)]
+    str     x16, [sp, (8 *  8)]
+    str     x17, [sp, (8 *  9)]
+    str     x18, [sp, (8 * 10)]
+    // call the function
+    bl      LinkNext
+    // preserve return value
+    mov     x3, x0
+    // pop regs
+    ldr     x0,  [sp, (8 *  0)]
+    ldr     x1,  [sp, (8 *  1)]
+    ldr     x10, [sp, (8 *  2)]
+    ldr     x11, [sp, (8 *  3)]
+    ldr     x12, [sp, (8 *  4)]
+    ldr     x13, [sp, (8 *  5)]
+    ldr     x14, [sp, (8 *  6)]
+    ldr     x15, [sp, (8 *  7)]
+    ldr     x16, [sp, (8 *  8)]
+    ldr     x17, [sp, (8 *  9)]
+    ldr     x18, [sp, (8 * 10)]
+    add     sp,  sp, (8 * 11)
+    // return offset is jump address
+    br      x3
+