void gen_eqless_ei(struct treenode *bnode, char *op)
{
printf("\t//gen_eqless_ei\n");
- KIDREG2PARM(0);
#if 0
/* TODO */
KIDREG2PARM(1)
void gen_eqless_ie(struct treenode *bnode, char *op)
{
printf("\t//gen_eqless_ie\n");
- moveimm(KID_VAL(0), BN_REG);
- printf("\tcmp %%%s, %%%s\n", KID_REG(1), BN_REG);
+ if(strcmp("e", op) == 0) {
+ printf("\tcmp $%li, %%%s\n", KID_VAL(0), KID_REG(1));
+ gen_eqless_footer(bnode, op);
+ } else {
+ moveimm(KID_VAL(0), BN_REG);
+ printf("\tcmp %%%s, %%%s\n", KID_REG(1), BN_REG);
- gen_eqless_footer(bnode, op);
+ gen_eqless_footer(bnode, op);
+ }
}
%}
expr: O_EQ(expr,expr) # 5 # gen_eqless_ee(bnode, "e");
expr: O_EQ(expr,imm) # 5 # gen_eqless_ei(bnode, "e");
-expr: O_EQ(imm,expr) # 6 # gen_eqless_ie(bnode, "e");
+expr: O_EQ(imm,expr) # 5 # gen_eqless_ie(bnode, "e");
exprno: O_ID # 0 # /* brauchen wir nicht 'zwischenlagern', weil nur gelesen wird */