X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=uebersetzerbau-ss10.git;a=blobdiff_plain;f=gesamt%2Fchelper.c;h=570c473eedd41d9c17e26531988cdc867eeba2af;hp=dd345b0934bf7e8db0b2810ba0a899d51c550326;hb=d9e004e6b5b1a6c12bbee39d34df312e6b4e711e;hpb=aa2fdae3a9d0c7b99ca5af67c055cbaa6c9d2b2e diff --git a/gesamt/chelper.c b/gesamt/chelper.c index dd345b0..570c473 100644 --- a/gesamt/chelper.c +++ b/gesamt/chelper.c @@ -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)