diff options
| author | WaluigiWare64 <68647953+WaluigiWare64@users.noreply.github.com> | 2020-12-19 17:43:53 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-12-19 17:43:53 +0000 |
| commit | df190b04000a8a3c5052de3fd695f6c26892f353 (patch) | |
| tree | 85c53cda9b5e6c73dcfb82f97272e509f023788b /src/ARMJIT_x64/ARMJIT_Linkage.S | |
| parent | d6cade25f4ac6b2ebac9d4830ab7b10294bc4c89 (diff) | |
| parent | 659dc58d4d8290d8ef1930d9f21007c0ec4c3739 (diff) | |
Merge branch 'master' into feature/zip-support
Diffstat (limited to 'src/ARMJIT_x64/ARMJIT_Linkage.S')
| -rw-r--r-- | src/ARMJIT_x64/ARMJIT_Linkage.S | 88 |
1 files changed, 88 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..8cc0b5f --- /dev/null +++ b/src/ARMJIT_x64/ARMJIT_Linkage.S @@ -0,0 +1,88 @@ +.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 + +#ifdef __APPLE__ +.global _ARM_Dispatch +_ARM_Dispatch: +#else +.global ARM_Dispatch +ARM_Dispatch: +#endif +#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 + +#ifdef __APPLE__ +.global _ARM_Ret +_ARM_Ret: +#else +.global ARM_Ret +ARM_Ret: +#endif + 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 |