X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;ds=sidebyside;f=gesamt_ppc%2Fchelper.c;h=c8746eb3e941361754d3c73bc14274aba89d6c25;hb=6ee8574eb8de603417fc0a55b6b9a809cb76b806;hp=94d3f9179b607f7d6b3823172b24573faad18f3e;hpb=0f89341e10f662c3ce1128d83e660709da9c3785;p=uebersetzerbau-ss10.git diff --git a/gesamt_ppc/chelper.c b/gesamt_ppc/chelper.c index 94d3f91..c8746eb 100644 --- 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) { +#if 0 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) { - if(need_stack) + if(need_stack) { +#if 0 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"); }