void moveimm(long imm, char *dst)
{
- char buf[100];
- sprintf(buf, "$%d", imm);
- printf("\tmovq %s, %%%s\n", buf, dst);
+ /* TODO: 32 bits... */
+ printf("\taddi %s,0,%d\n", dst, imm);
}
char *next_reg(char *s, int params)
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
+ /* subf only */
+ printf("\taddi %s,%s,%d\n", BN_REG, KID_REG(0), -1*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)