From: Bernhard Urban Date: Tue, 4 May 2010 10:10:48 +0000 (+0200) Subject: codea: 'bessere' register auswahl. grosses TODO *angst* X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=uebersetzerbau-ss10.git;a=commitdiff_plain;h=34c7d86c1434c7066fbc29ba337afa21bb19bae6 codea: 'bessere' register auswahl. grosses TODO *angst* --- diff --git a/codea/chelper.c b/codea/chelper.c index be39f3f..7b76626 100644 --- a/codea/chelper.c +++ b/codea/chelper.c @@ -38,8 +38,12 @@ void ret(void) char *next_reg(char *s, short skip) { - /* TODO: warum enthaelt das register die parameter enthalten koennten? */ + /* TODO: bessere registerwahl. das is gerade a wengal suboptimal... */ +#if 1 + char *regs[] = {"rax", "r10", "r11", "rax"}; +#else char *regs[] = {"rax", "r10", "r11", "r9", "r8", "rcx", "rdx", "rsi", "rdi"}; +#endif int i=0; if (s != (char*) NULL) { while(i < 9) { diff --git a/codea/parser.y b/codea/parser.y index e75f2ef..15b2424 100644 --- a/codea/parser.y +++ b/codea/parser.y @@ -208,15 +208,9 @@ Expr: @reg { /* TODO */ fprintf(stderr, "at_expr: Minusterm.imm \"%i\", Term.imm \"%i\"\n", @Minusterm.imm@, @Term.imm@); - #if 0 - if(@Minusterm.imm@) { - @Minusterm.node@->reg = @Expr.node@->reg; - @Term.node@->reg = next_reg(@Minusterm.node@->reg, @Expr.node@->skip); - @Minusterm.node@->skip = 1; - } else { - #endif - @Term.node@->reg = @Expr.node@->reg; - @Minusterm.node@->reg = next_reg(@Term.node@->reg, @Expr.node@->skip); + @Term.node@->reg = @Expr.node@->reg; + @Term.node@->skip = 1; + @Minusterm.node@->reg = next_reg(@Term.node@->reg, @Expr.node@->skip); } @}