codea: bessere registerbelegung fuer multiplikation bzw. subtraktion
authorBernhard Urban <lewurm@gmail.com>
Mon, 17 May 2010 17:56:22 +0000 (19:56 +0200)
committerBernhard Urban <lewurm@gmail.com>
Mon, 17 May 2010 17:56:22 +0000 (19:56 +0200)
codea/parser.y

index b3b3726c781697c1d42ed2b62065141651ae78e5..c01bee7d93c7480451077e00ce4f2f346b74a563 100644 (file)
@@ -235,11 +235,14 @@ Expr:
                @i @Expr.imm@ = @Term.imm@ && @Minusterm.imm@;
 
                @reg {
-                       /* TODO */
                        if(!(@Expr.node@->kids[0] == TREENULL && @Expr.node@->kids[1] == TREENULL)) {
                                @Term.node@->reg = @Expr.node@->reg;
                                @Term.node@->skip = 0;
-                               @Minusterm.node@->reg = next_reg(@Term.node@->reg, @Expr.node@->skip, @Expr.gparamges@);
+                               if(@Minusterm.imm@) {
+                                       @Minusterm.node@->reg = @Expr.node@->reg;
+                               } else {
+                                       @Minusterm.node@->reg = next_reg(@Term.node@->reg, @Expr.node@->skip, @Expr.gparamges@);
+                               }
                        }
                }
          @}
@@ -251,10 +254,13 @@ Expr:
                @i @Expr.imm@ = @Term.imm@ && @Multerm.imm@;
 
                @reg {
-                       /* TODO */
                        @Term.node@->reg = @Expr.node@->reg;
                        @Term.node@->skip = 0;
-                       @Multerm.node@->reg = next_reg(@Term.node@->reg, @Expr.node@->skip, @Expr.gparamges@);
+                       if(@Term.imm@) {
+                               @Multerm.node@->reg = @Expr.node@->reg;
+                       } else {
+                               @Multerm.node@->reg = next_reg(@Term.node@->reg, @Expr.node@->skip, @Expr.gparamges@);
+                       }
                }
          @}