From b82da83a0ad2014c11113818eee6bd5fb5f3445c Mon Sep 17 00:00:00 2001 From: Bernhard Urban Date: Wed, 5 May 2010 19:26:25 +0200 Subject: [PATCH] codea: optimierung fuer equal und ein kleiner bugfix in gen_eqless_ei --- codea/code.bfe | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/codea/code.bfe b/codea/code.bfe index 362ace5..fd78dd2 100644 --- a/codea/code.bfe +++ b/codea/code.bfe @@ -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 */ -- 2.25.1