libwine: Implemented the call_on_stack function for Sparc.

This commit is contained in:
André Hentschel 2011-01-14 21:46:26 +01:00 committed by Alexandre Julliard
parent 4b028deb00
commit 30063b5439
1 changed files with 13 additions and 0 deletions

View File

@ -182,6 +182,19 @@ __ASM_GLOBAL_FUNC( wine_call_on_stack,
"mov PC, r2\n\t" /* call func */
"mov sp, r4\n\t" /* restore old sp from local var */
"pop {r4,PC}") /* fetch return address into pc */
#elif defined(__sparc__) && defined(__GNUC__)
__ASM_GLOBAL_FUNC( wine_call_on_stack,
"save %sp, -96, %sp\n\t" /* push: change register window */
"mov %sp, %l2\n\t" /* store old sp in local var */
"mov %i0, %l0\n\t" /* func */
"mov %i1, %l1\n\t" /* arg */
"sub %i2, 96, %sp\n\t" /* stack */
"call %l0, 0\n\t" /* call func */
"mov %l1, %o0\n\t" /* delay slot: arg for func */
"mov %l2, %sp\n\t" /* restore old sp from local var */
"mov %o0, %i0\n\t" /* move return value to right register window */
"ret\n\t" /* return */
"restore\n\t") /* delay slot: pop */
#else
#error You must implement wine_switch_to_stack for your platform
#endif