codea: optimierung fuer equal und ein kleiner bugfix in gen_eqless_ei
authorBernhard Urban <lewurm@gmail.com>
Wed, 5 May 2010 17:26:25 +0000 (19:26 +0200)
committerBernhard Urban <lewurm@gmail.com>
Wed, 5 May 2010 17:27:00 +0000 (19:27 +0200)
codea/code.bfe

index 362ace594b578293deffcfba9b3bec3db8568bf0..fd78dd2e7309a1ad24f7bd52ee7795fca7bb7135 100644 (file)
@@ -69,7 +69,6 @@ void gen_eqless_ee(struct treenode *bnode, char *op)
 void gen_eqless_ei(struct treenode *bnode, char *op)
 {
        printf("\t//gen_eqless_ei\n");
-       KIDREG2PARM(0);
 #if 0
        /* TODO */
        KIDREG2PARM(1)
@@ -82,10 +81,15 @@ void gen_eqless_ei(struct treenode *bnode, char *op)
 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);
+       }
 }
 
 %}
@@ -121,7 +125,7 @@ expr: O_LESS(imm,expr) # 6 # gen_eqless_ie(bnode, "l");
 
 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 */