X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=uebersetzerbau-ss10.git;a=blobdiff_plain;f=codea%2Fcode.bfe;h=6ae2bfb63f0978cd1245a60acd8b7c1d9952fb21;hp=708bbe7eb6e059d8934d92960e1523cee1675c52;hb=e7a9612251a3dc8e447d4cc4ad2f9ef49f13a783;hpb=59b426c0bdff0d792f55cbc404df008aa08837cf diff --git a/codea/code.bfe b/codea/code.bfe index 708bbe7..6ae2bfb 100644 --- a/codea/code.bfe +++ b/codea/code.bfe @@ -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");