/* ja, dirty.. */
static char *akt_func_name = (char*) NULL;
static char need_stack = 0;
-static int gvars;
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);
+ printf("\t//vars: %i, parms: %i, call(bool): %i\n", vars, parms, call);
akt_func_name = s;
-#if 0
need_stack = (vars || parms) && call;
-#else
- need_stack = vars || (parms && call);
- gvars = vars;
-#endif
if(need_stack) {
- /* 2 * 7 fuer paramterregs reservieren + 2 fuer rax und r10 */
- printf("\tenter $%d, $0\n", 8*(2*7 + 2));
-
- int j;
- printf("\t//vars pushen\n"); /* koennten parameter enthalten von anderen fkts... */
- for(j = VARBEGIN; j > VARBEGIN - vars; j--) {
- printf("\tpushq %%%s\n", param_reg(j));
- }
+ printf("\tenter $%d, $0\n", 8*(vars + parms + 2 /* fuer rax und r10 */));
}
}
void func_footer(void)
{
- if(need_stack) {
- int j;
- /* vars poppen */
- for(j = VARBEGIN+1 - gvars; j < VARBEGIN+1; j++) {
- printf("\tpopq %%%s\n", param_reg(j));
- }
+ if(need_stack)
printf("\tleave\n");
- }
printf("\tret\n\n\n");
}