/* ja, dirty.. */
static char *akt_func_name = (char*) NULL;
-void func_header(char *s)
+static char need_stack = 0;
+
+void func_header(char *s, int vars, int parms, int call)
{
printf("\t.globl %1$s\n\t.type %1$s, @function\n%1$s:\n", s);
+ printf("\t//vars: %i, parms: %i, call(bool): %i\n", vars, parms, call);
akt_func_name = s;
+
+ need_stack = (vars || parms) && call;
+ if(need_stack) {
+ printf("\tpushq %%rbp\n"
+ "\tmovq %%rsp, %%rbp\n",
+ "\tsubq $%d, %%rsp\n", 8*(vars+parms));
+ }
}
char *get_func_name(void)
void func_footer(void)
{
+ if(need_stack)
+ printf("\tleave\n");
printf("\tret\n");
}