Module: wine Branch: master Commit: 30063b5439dfa127d638324f7142656d73bac9cc URL: http://source.winehq.org/git/wine.git/?a=commit;h=30063b5439dfa127d638324f71...
Author: André Hentschel nerv@dawncrow.de Date: Fri Jan 14 21:46:26 2011 +0100
libwine: Implemented the call_on_stack function for Sparc.
---
libs/wine/port.c | 13 +++++++++++++ 1 files changed, 13 insertions(+), 0 deletions(-)
diff --git a/libs/wine/port.c b/libs/wine/port.c index 3562afa..32b819b 100644 --- a/libs/wine/port.c +++ b/libs/wine/port.c @@ -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