From ef783d62ccdf2cc9dce7490d07acf2e803ca1708 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Hentschel?= Date: Sun, 9 Aug 2015 14:09:24 +0200 Subject: [PATCH] rpcrt4: Add ARM support. --- dlls/rpcrt4/ndr_stubless.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/dlls/rpcrt4/ndr_stubless.c b/dlls/rpcrt4/ndr_stubless.c index dbdf873f50..033c650d4a 100644 --- a/dlls/rpcrt4/ndr_stubless.c +++ b/dlls/rpcrt4/ndr_stubless.c @@ -1094,6 +1094,40 @@ __ASM_GLOBAL_FUNC( call_server_func, __ASM_CFI(".cfi_adjust_cfa_offset -8\n\t") __ASM_CFI(".cfi_same_value %rbp\n\t") "ret") +#elif defined __arm__ +LONG_PTR __cdecl call_server_func(SERVER_ROUTINE func, unsigned char *args, unsigned int stack_size); +__ASM_GLOBAL_FUNC( call_server_func, + ".arm\n\t" + "push {r4, r5, LR}\n\t" + "mov r4, r0\n\t" + "mov r5, SP\n\t" + "lsr r3, r2, #2\n\t" + "cmp r3, #0\n\t" + "beq 5f\n\t" + "sub SP, SP, r2\n\t" + "tst r3, #1\n\t" + "subeq SP, SP, #4\n\t" + "1:\tsub r2, r2, #4\n\t" + "ldr r0, [r1, r2]\n\t" + "str r0, [SP, r2]\n\t" + "cmp r2, #0\n\t" + "bgt 1b\n\t" + "cmp r3, #1\n\t" + "bgt 2f\n\t" + "pop {r0}\n\t" + "b 5f\n\t" + "2:\tcmp r3, #2\n\t" + "bgt 3f\n\t" + "pop {r0-r1}\n\t" + "b 5f\n\t" + "3:\tcmp r3, #3\n\t" + "bgt 4f\n\t" + "pop {r0-r2}\n\t" + "b 5f\n\t" + "4:\tpop {r0-r3}\n\t" + "5:\tblx r4\n\t" + "mov SP, r5\n\t" + "pop {r4, r5, PC}" ) #else #warning call_server_func not implemented for your architecture LONG_PTR __cdecl call_server_func(SERVER_ROUTINE func, unsigned char * args, unsigned short stack_size)