diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-03-14 17:58:04 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-03-14 17:58:04 +0100 |
| commit | 4919f161cc7a0cfa31f91b0d1e2d0ff600044ff6 (patch) | |
| tree | e89e9892fa166aa348b8c9f902de7428e875c7bc /src/dynarec/arm64_next.S | |
| parent | 3dda84e58b148f92b2bb4d94caacc84011fa3919 (diff) | |
| download | box64-4919f161cc7a0cfa31f91b0d1e2d0ff600044ff6.tar.gz box64-4919f161cc7a0cfa31f91b0d1e2d0ff600044ff6.zip | |
[DYNAREC] Added Basic blocks for dynarec
Diffstat (limited to 'src/dynarec/arm64_next.S')
| -rwxr-xr-x | src/dynarec/arm64_next.S | 47 |
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 + |