André Hentschel : libwine: Implemented the call_on_stack function for Sparc.

Alexandre Julliard julliard at winehq.org
Mon Jan 17 10:59:38 CST 2011


Module: wine
Branch: master
Commit: 30063b5439dfa127d638324f7142656d73bac9cc
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=30063b5439dfa127d638324f7142656d73bac9cc

Author: André Hentschel <nerv at 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




More information about the wine-cvs mailing list