diff options
| author | Arisotura <thetotalworm@gmail.com> | 2020-12-04 18:28:15 +0100 |
|---|---|---|
| committer | Arisotura <thetotalworm@gmail.com> | 2020-12-04 18:28:15 +0100 |
| commit | 129018a6626cbec915ef73484c51c9d07af8e8b9 (patch) | |
| tree | 8e5712bd241319731f7b6ade3363cefe845e3a5e /src/ARMJIT_x64/ARMJIT_Linkage.S | |
| parent | 6aad429383015a0ac135b081931ae9c5876a7ad0 (diff) | |
| parent | 42e083960e52cce31589714dcc7fab8e173efb81 (diff) | |
Merge remote-tracking branch 'remotes/origin/master' into dsi_camera
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 |