gesamt: registerbelegung fuer VARs doch wieder geaendert...
authorBernhard Urban <lewurm@gmail.com>
Wed, 9 Jun 2010 18:06:16 +0000 (20:06 +0200)
committerBernhard Urban <lewurm@gmail.com>
Wed, 9 Jun 2010 18:06:16 +0000 (20:06 +0200)
passt jetzt so fuer alle testfaelle :)

gesamt/chelper.h
gesamt/code.bfe
gesamt/parser.y

index fcbc257d3a2ffa6363c1c4138f6e84d158960304..ea7481b3f94d8ae566e22f9466cb6cb3b2a10e49 100644 (file)
@@ -1,6 +1,5 @@
 #ifndef __CHELPER_H
 #define __CHELPER_H
-#define VARBEGIN 5
 
 void func_header(char *s, int vars, int parms, int call);
 char *get_func_name(void);
index 14121c9cff5246867efc17004f3175f0975943f5..33979ba71c1aed73be25d9e7cb0e8298e453f5bd 100644 (file)
@@ -195,7 +195,7 @@ void make_call(struct treenode *bnode)
                printf("\txchg %%%s, %d(%%rsp)\n", param_reg(j), j*8);
        }
        printf("\t//vars pushen\n");
-       for(j = VARBEGIN; j > VARBEGIN - bnode->vars; j--) {
+       for(j = bnode->soffset; j < bnode->soffset + bnode->vars; j++) {
                printf("\tpushq %%%s\n", param_reg(j));
        }
 
@@ -217,7 +217,7 @@ void make_call(struct treenode *bnode)
        }
 
        /* vars poppen */
-       for(j = VARBEGIN+1 - bnode->vars; j < VARBEGIN+1; j++) {
+       for(j = bnode->soffset + bnode->vars - 1; j > bnode->soffset - 1; j--) {
                printf("\tpopq %%%s\n", param_reg(j));
        }
 
index 55ca382b994419b602ab8326c0fcc4c85f066068..4b453522a9469260b8bae5883f8300abb1a2caf3 100644 (file)
@@ -178,14 +178,14 @@ Statement:
          @{
                /* tab_clone ist hier noetig, vgl. folgendes statement
                 * > var x := x - 1; */
-               @i @Statement.sout@ = tab_add_symbol(tab_clone(@Statement.sin@), @IDENT.name@, S_VAR, 1, VARBEGIN - @Statement.vars_in@, -1);
+               @i @Statement.sout@ = tab_add_symbol(tab_clone(@Statement.sin@), @IDENT.name@, S_VAR, 1, @Statement.gparamges@ + @Statement.vars_in@, -1);
                lblcountinout()
 
                @i @Statement.vars_out@ = @Statement.vars_in@ + 1;
 
                xxputsin(@Expr.s@,)
 
-               @i @Statement.node@ = new_node(O_ASSIGN, @Expr.node@, new_param(O_ID, @IDENT.name@, TREENULL, TREENULL, VARBEGIN - @Statement.vars_in@));
+               @i @Statement.node@ = new_node(O_ASSIGN, @Expr.node@, new_param(O_ID, @IDENT.name@, TREENULL, TREENULL, @Statement.gparamges@ + @Statement.vars_in@));
                @reg @Statement.node@->reg = @Expr.node@->reg = next_reg((char *)NULL, @Expr.gparamges@);
 
                @gen write_tree(@Statement.node@, 0); burm_label(@Statement.node@); burm_reduce(@Statement.node@, 1);