gesamt: noch zwei optimierungen ->
[uebersetzerbau-ss10.git] / gesamt / chelper.c
index dd345b0934bf7e8db0b2810ba0a899d51c550326..570c473eedd41d9c17e26531988cdc867eeba2af 100644 (file)
@@ -15,6 +15,7 @@ static char *regs8l[] = {"al", "r10b", "r11b", "r9b"};
 /* ja, dirty.. */
 static char *akt_func_name = (char*) NULL;
 static char need_stack = 0;
+static int call_s = 0;
 
 void func_header(char *s, int vars, int parms, int call)
 {
@@ -23,7 +24,8 @@ void func_header(char *s, int vars, int parms, int call)
        akt_func_name = s;
 
        need_stack = (vars || parms) && call;
-       if(need_stack) {
+       call_s = call;
+       if(need_stack && (call != -1)) {
                printf("\tenter $%d, $0\n", 8*(vars + parms + 2 /* fuer rax und r10 */));
        }
 }
@@ -35,9 +37,11 @@ char *get_func_name(void)
 
 void func_footer(void)
 {
-       if(need_stack)
-               printf("\tleave\n");
-       printf("\tret\n\n\n");
+       if(call_s != -1) {
+               if(need_stack)
+                       printf("\tleave\n");
+               printf("\tret\n\n\n");
+       }
 }
 
 void move(char *src, char *dst)