=?UTF-8?Q?Andr=C3=A9=20Hentschel=20?=: vcomp: Add ARM64 support.

Alexandre Julliard julliard at winehq.org
Tue Jul 11 15:59:32 CDT 2017


Module: wine
Branch: master
Commit: 33a8f192b0678e3fa5b8287dc1759995e6983986
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=33a8f192b0678e3fa5b8287dc1759995e6983986

Author: André Hentschel <nerv at dawncrow.de>
Date:   Sun Jul  9 17:10:59 2017 +0200

vcomp: Add ARM64 support.

Signed-off-by: André Hentschel <nerv at dawncrow.de>
Signed-off-by: Sebastian Lackner <sebastian at fds-team.de>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/vcomp/main.c | 45 +++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 45 insertions(+)

diff --git a/dlls/vcomp/main.c b/dlls/vcomp/main.c
index 5206e47..ab51ef2 100644
--- a/dlls/vcomp/main.c
+++ b/dlls/vcomp/main.c
@@ -229,6 +229,51 @@ __ASM_GLOBAL_FUNC( _vcomp_fork_call_wrapper,
                    "mov SP, r5\n\t"
                    "pop {r4, r5, PC}" )
 
+#elif defined(__aarch64__)
+
+extern void CDECL _vcomp_fork_call_wrapper(void *wrapper, int nargs, __ms_va_list args);
+__ASM_GLOBAL_FUNC( _vcomp_fork_call_wrapper,
+                   "stp x29, x30, [SP,#-16]!\n\t"
+                   "mov x29, SP\n\t"
+                   "mov x9, x0\n\t"
+                   "cbz w1, 2f\n\t"
+                   "mov w10, w1\n\t"
+                   "mov x11, x2\n\t"
+                   "ldr w12, [x11, #24]\n\t"
+                   "ldr x13, [x11, #8]\n\t"
+                   "ldr x0, [x13, w12, sxtw]\n\t"
+                   "add w12, w12, #8\n\t"
+                   "ldr x1, [x13, w12, sxtw]\n\t"
+                   "add w12, w12, #8\n\t"
+                   "ldr x2, [x13, w12, sxtw]\n\t"
+                   "add w12, w12, #8\n\t"
+                   "ldr x3, [x13, w12, sxtw]\n\t"
+                   "add w12, w12, #8\n\t"
+                   "ldr x4, [x13, w12, sxtw]\n\t"
+                   "add w12, w12, #8\n\t"
+                   "ldr x5, [x13, w12, sxtw]\n\t"
+                   "add w12, w12, #8\n\t"
+                   "ldr x6, [x13, w12, sxtw]\n\t"
+                   "add w12, w12, #8\n\t"
+                   "ldr x7, [x13, w12, sxtw]\n\t"
+                   "add w12, w12, #8\n\t"
+                   "add x13, x13, w12, sxtw\n\t"
+                   "subs w12, w10, #8\n\t"
+                   "b.le 2f\n\t"
+                   "ldr x11, [x11]\n\t"
+                   "lsl w12, w12, #3\n\t"
+                   "sub SP, SP, w12, sxtw\n\t"
+                   "tbz w12, #3, 1f\n\t"
+                   "sub SP, SP, #8\n\t"
+                   "1: sub w12, w12, #8\n\t"
+                   "ldr x14, [x13, w12, sxtw]\n\t"
+                   "str x14, [SP,  w12, sxtw]\n\t"
+                   "cbnz w12, 1b\n\t"
+                   "2: blr x9\n\t"
+                   "mov SP, x29\n\t"
+                   "ldp x29, x30, [SP], #16\n\t"
+                   "ret\n" )
+
 #else
 
 static void CDECL _vcomp_fork_call_wrapper(void *wrapper, int nargs, __ms_va_list args)




More information about the wine-cvs mailing list