codea: 'bessere' register auswahl. grosses TODO *angst*
authorBernhard Urban <lewurm@gmail.com>
Tue, 4 May 2010 10:10:48 +0000 (12:10 +0200)
committerBernhard Urban <lewurm@gmail.com>
Tue, 4 May 2010 10:10:48 +0000 (12:10 +0200)
codea/chelper.c
codea/parser.y

index be39f3f3314e3efb312a8bf608e508f29396021c..7b7662671e588c6f80763a41251303251b8dfd31 100644 (file)
@@ -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) {
index e75f2efcd55d1b4eb76dbca072bb89adce393e12..15b2424eb53e747e73a9b9d2a2e0abd1e09768dd 100644 (file)
@@ -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);
                }
          @}