#else
KIDREG2PARM(0);
KIDREG2PARM(1);
- printf("\t%s %s,%s,%s\n", instr, BN_REG, KID_REG(1), KID_REG(0));
+ printf("\t%s %s,%s,%s\n", instr, BN_REG, KID_REG(0), KID_REG(1));
#endif
}
KIDKIDREG2PARM(1,1);
KIDREG2PARM(0);
move(KID_REG(0), BN_REG);
- printf("\tsubf %%%s, %%%s\n", KIDKID_REG(1,1), BN_REG);
- printf("\tsubf %%%s, %%%s\n", KIDKID_REG(1,0), BN_REG);
+ printf("\tsub %%%s, %%%s\n", KIDKID_REG(1,1), BN_REG);
+ printf("\tsub %%%s, %%%s\n", KIDKID_REG(1,0), BN_REG);
}
void gen_e_field(struct treenode *bnode, char *instr)
printf("\timulq $%d, %%%s, %%%s\n", KID_VAL(1), KID_REG(0), BN_REG);
}
} else {
- if(strcmp(instr, "subf") == 0 && KID_VAL(1) == 0) {
+ if(strcmp(instr, "sub") == 0 && KID_VAL(1) == 0) {
printf("\t#subtraktion mit 0 wegoptimiert\n");
move(KID_REG(0), BN_REG);
} else {
+#if 0
move(KID_REG(0), BN_REG);
printf("\t%s $%d, %%%s\n", instr, KID_VAL(1), BN_REG);
+#else
+ printf("\t%si %s,%s,%d\n", instr, BN_REG, KID_REG(0), KID_VAL(1));
+#endif
}
}
}
void gen_eqless(struct treenode *bnode, char *op, short e0, short e1, short deep)
{
- printf("\t#gen_eqless_%i%i @ %i\n", e0, e1, deep);
+ printf("\t#gen_eqless_%i%i @ %i (op: %s)\n", e0, e1, deep, op);
+#if 0
if(e0) { KIDREG2PARM(0); } else { KIDREG2ID(0); }
if(e1) { KIDREG2PARM(1); } else { KIDREG2ID(1); }
}
printf("\tset%s %%%s\n", op, reg_64to8l(BN_REG));
printf("\tand $1, %%%s\n", BN_REG);
+#else
+ if(e0) { KIDREG2PARM(0); } else { KIDREG2ID(0); }
+ if(e1) { KIDREG2PARM(1); } else { KIDREG2ID(1); }
+ if(strcmp(op,"e")==0 && KID_VAL(1) == 0) {
+ /* not */
+ printf("\tcntlzw %s,%s\n", KID_REG(0), KID_REG(0));
+ printf("\tsrwi %s,%s,5\n", BN_REG, KID_REG(0));
+ }
+#endif
}
void gen_lea(struct treenode *bnode, short e)
expr: O_ARG(O_ID,expr) # 1 # prep_arg(bnode, 0);
expr: O_NOTHING # 0 #
-expr: O_SUB(expr,expr) # 2 # gen_e_eno(bnode, "subf");
-expr: O_SUB(expr,O_FIELD(expr)) # 2 # gen_e_field(bnode, "subf");
-expr: O_SUB(expr,imm) # 1 # gen_e_imm(bnode, "subf");
+expr: O_SUB(expr,expr) # 2 # gen_e_eno(bnode, "sub");
+expr: O_SUB(expr,O_FIELD(expr)) # 2 # gen_e_field(bnode, "sub");
+expr: O_SUB(expr,imm) # 1 # gen_e_imm(bnode, "sub");
expr: O_SUB(expr,O_SUB(O_ID,expr)) # 2 # gen_subspecial(bnode, 0);
expr: O_SUB(expr,O_SUB(imm,expr)) # 2 # gen_subspecial(bnode, 1);