diff options
| author | Arisotura <thetotalworm@gmail.com> | 2020-07-01 00:01:11 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-07-01 00:01:11 +0200 |
| commit | 62c6e2f703d88660e0ca9bda78032c5bd6b63a78 (patch) | |
| tree | 1dbf9eb1bbe418d14f07dc3a0e30821fb5deb258 /src/ARMJIT_x64/ARMJIT_Linkage.s | |
| parent | d97ce22b010e868437c649911bce89d679a4deaa (diff) | |
| parent | c5381d2911d47fb1fcbd6ec27a83f5da3606c4bd (diff) | |
Merge pull request #667 from Arisotura/generic_jit
merge jit
Diffstat (limited to 'src/ARMJIT_x64/ARMJIT_Linkage.s')
| -rw-r--r-- | src/ARMJIT_x64/ARMJIT_Linkage.s | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/src/ARMJIT_x64/ARMJIT_Linkage.s b/src/ARMJIT_x64/ARMJIT_Linkage.s new file mode 100644 index 0000000..0a84df0 --- /dev/null +++ b/src/ARMJIT_x64/ARMJIT_Linkage.s @@ -0,0 +1,78 @@ +.intel_syntax noprefix + +#include "ARMJIT_Offsets.h" + +.text + +#define RCPU rbp +#define RCPSR r15d + +#ifdef WIN64 +#define ARG1_REG ecx +#define ARG2_REG edx +#define ARG3_REG r8d +#define ARG4_REG r9d +#define ARG1_REG64 rcx +#define ARG2_REG64 rdx +#define ARG3_REG64 r8 +#define ARG4_REG64 r9 +#else +#define ARG1_REG edi +#define ARG2_REG esi +#define ARG3_REG edx +#define ARG4_REG ecx +#define ARG1_REG64 rdi +#define ARG2_REG64 rsi +#define ARG3_REG64 rdx +#define ARG4_REG64 rcx +#endif + +.p2align 4,,15 + +.global ARM_Dispatch +ARM_Dispatch: +#ifdef WIN64 + push rdi + push rsi +#endif + push rbx + push r12 + push r13 + push r14 + push r15 + push rbp + +#ifdef WIN64 + sub rsp, 0x28 +#else + sub rsp, 0x8 +#endif + mov RCPU, ARG1_REG64 + mov RCPSR, [RCPU + ARM_CPSR_offset] + + jmp ARG2_REG64 + +.p2align 4,,15 + +.global ARM_Ret +ARM_Ret: + mov [RCPU + ARM_CPSR_offset], RCPSR + +#ifdef WIN64 + add rsp, 0x28 +#else + add rsp, 0x8 +#endif + + pop rbp + pop r15 + pop r14 + pop r13 + pop r12 + pop rbx +#ifdef WIN64 + pop rsi + pop rdi +#endif + + ret |