rpcrt4: Add ARM support.
This commit is contained in:
parent
3ad5a07856
commit
ef783d62cc
@ -1094,6 +1094,40 @@ __ASM_GLOBAL_FUNC( call_server_func,
|
|||||||
__ASM_CFI(".cfi_adjust_cfa_offset -8\n\t")
|
__ASM_CFI(".cfi_adjust_cfa_offset -8\n\t")
|
||||||
__ASM_CFI(".cfi_same_value %rbp\n\t")
|
__ASM_CFI(".cfi_same_value %rbp\n\t")
|
||||||
"ret")
|
"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
|
#else
|
||||||
#warning call_server_func not implemented for your architecture
|
#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)
|
LONG_PTR __cdecl call_server_func(SERVER_ROUTINE func, unsigned char * args, unsigned short stack_size)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user