codea: bug mit addq regel gefixt
[uebersetzerbau-ss10.git] / 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");