libwine: Implemented the call_on_stack function for Sparc.
This commit is contained in:
parent
4b028deb00
commit
30063b5439
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue