projects
/
uebersetzerbau-ss10.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
ppc: gesamt (stack und so) geht jetzt auch
[uebersetzerbau-ss10.git]
/
gesamt_ppc
/
chelper.c
diff --git
a/gesamt_ppc/chelper.c
b/gesamt_ppc/chelper.c
index 94d3f9179b607f7d6b3823172b24573faad18f3e..c8746eb3e941361754d3c73bc14274aba89d6c25 100644
(file)
--- a/
gesamt_ppc/chelper.c
+++ b/
gesamt_ppc/chelper.c
@@
-23,7
+23,14
@@
void func_header(char *s, int vars, int parms, int call)
need_stack = (vars || parms) && call;
if(need_stack) {
need_stack = (vars || parms) && call;
if(need_stack) {
+#if 0
printf("\tenter $%d, $0\n", 8*(vars + parms + 2 /* fuer rax und r10 */));
printf("\tenter $%d, $0\n", 8*(vars + parms + 2 /* fuer rax und r10 */));
+#else
+ /* save the link register */
+ printf("\tmflr 0; stw 0,8(1)\n");
+ /* create the stack */
+ printf("\tstwu 1, -64(1)\n");
+#endif
}
}
}
}
@@
-34,8
+41,16
@@
char *get_func_name(void)
void func_footer(void)
{
void func_footer(void)
{
- if(need_stack)
+ if(need_stack) {
+#if 0
printf("\tleave\n");
printf("\tleave\n");
+#else
+ /* remove stack frame */
+ printf("\taddi 1,1,64\n");
+ /* restore link register */
+ printf("\tlwz 0,8(1); mtlr 0\n");
+#endif
+ }
printf("\tblr\n\n\n");
}
printf("\tblr\n\n\n");
}