codea: bug mit addq regel gefixt
authorBernhard Urban <lewurm@gmail.com>
Mon, 17 May 2010 13:01:42 +0000 (15:01 +0200)
committerBernhard Urban <lewurm@gmail.com>
Mon, 17 May 2010 13:01:42 +0000 (15:01 +0200)
codea/code.bfe

index 708bbe7eb6e059d8934d92960e1523cee1675c52..6ae2bfb63f0978cd1245a60acd8b7c1d9952fb21 100644 (file)
@@ -48,7 +48,9 @@ void gen_imm_eno(struct treenode *bnode, char *instr)
        /* man kann sich ein move der konstante bei der multiplikation ersparen */
        if(strcmp(instr, "imulq") == 0) {
                printf("\timulq $%d, %%%s, %%%s\n", KID_VAL(0), KID_REG(1), BN_REG);
-       } else {
+       } else if(strcmp(instr, "addq") == 0) {
+               printf("\taddq $%d, %%%s\n", KID_VAL(0), BN_REG);
+       } else { /* subq */
                moveimm(KID_VAL(0), BN_REG);
                printf("\t%s %%%s, %%%s\n", instr, KID_REG(1), BN_REG);
        }
@@ -97,7 +99,8 @@ expr: O_SUB(expr,imm)    # 2 # gen_e_imm(bnode, "subq");
 expr: O_SUB(imm,expr)  # 2 # gen_imm_eno(bnode, "subq");
 
 expr: O_ADD(expr,expr) # 1 # gen_e_eno(bnode, "addq");
-expr: O_ADD(imm,expr)    # 2 # gen_e_imm(bnode, "addq");
+expr: O_ADD(expr,imm)    # 2 # gen_e_imm(bnode, "addq");
+expr: O_ADD(imm,expr)    # 2 # gen_imm_eno(bnode, "addq");
 
 expr: O_MUL(expr,expr) # 1 # gen_e_eno(bnode, "imulq");
 expr: O_MUL(expr,imm)    # 1 # gen_e_imm(bnode, "imulq");