KIDREG2ID(1);
/* man kann sich ein move der konstante bei der multiplikation ersparen */
if(strcmp(instr, "imulq") == 0) {
- printf("\timulq $%d, %%%s, %%%s\n", KID_VAL(1), KID_REG(0), BN_REG);
+ if(KID_VAL(1) == 1 && strcmp(KID_REG(0), BN_REG) == 0) {
+ printf("\t//multiplikation mit 1 wegoptimiert\n");
+ } else {
+ printf("\timulq $%d, %%%s, %%%s\n", KID_VAL(1), KID_REG(0), BN_REG);
+ }
} else {
- printf("\t%s $%d, %%%s\n", instr, KID_VAL(1), KID_REG(0));
- move(KID_REG(0), BN_REG);
+ if(strcmp(instr, "subq") == 0 && KID_VAL(1) == 0) {
+ printf("\t//subtraktion mit 0 wegoptimiert\n");
+ move(KID_REG(0), BN_REG);
+ } else {
+ printf("\t%s $%d, %%%s\n", instr, KID_VAL(1), KID_REG(0));
+ move(KID_REG(0), BN_REG);
+ }
}
}
KIDREG2PARM(1);
/* 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);
+ if(KID_VAL(0) == 1 && strcmp(KID_REG(1), BN_REG) == 0) {
+ printf("\t//multiplikation mit 1 wegoptimiert\n");
+ } else {
+ printf("\timulq $%d, %%%s, %%%s\n", KID_VAL(0), KID_REG(1), BN_REG);
+ }
} else if(strcmp(instr, "addq") == 0) {
printf("\taddq $%d, %%%s\n", KID_VAL(0), BN_REG);
} else { /* subq */