From fd71cdcba00c98a52bd277b31bec84587b057566 Mon Sep 17 00:00:00 2001 From: Bernhard Urban Date: Mon, 17 May 2010 23:43:36 +0200 Subject: [PATCH] codea: field optimierung fuer OR --- codea/code.bfe | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/codea/code.bfe b/codea/code.bfe index 2d5f234..c184545 100644 --- a/codea/code.bfe +++ b/codea/code.bfe @@ -32,6 +32,14 @@ void gen_e_eno(struct treenode *bnode, char *instr) printf("\t%s %%%s, %%%s\n", instr, KID_REG(1), KID_REG(0)); } +void gen_e_field(struct treenode *bnode, char *instr) +{ + printf("\t//gen_e_field(%s)\n", instr); + KIDREG2ID(0); + KIDKIDREG2PARM(1,0); + printf("\t%s %d(%%%s), %%%s\n", instr, bnode->kids[1]->soffset * 8, KIDKID_REG(1,0), KID_REG(0)); +} + void gen_e_imm(struct treenode *bnode, char *instr) { printf("\t//gen_e_imm(%s)\n", instr); @@ -139,6 +147,7 @@ expr: O_MUL(imm,expr) # 1 # gen_imm_eno(bnode, "imulq"); expr: O_OR(expr,expr) # 1 # gen_e_eno(bnode, "orq"); expr: O_OR(expr,imm) # 2 # gen_e_imm(bnode, "orq"); +expr: O_OR(expr,O_FIELD(expr)) # 2 # gen_e_field(bnode, "orq"); expr: O_LESS(expr,expr) # 3 # gen_eqless(bnode, "l", 1, 1, 0); expr: O_LESS(expr,imm) # 3 # gen_eqless(bnode, "l", 1, 0, 0); @@ -161,6 +170,7 @@ imm: O_SUB(imm,imm) # 0 # BN_VAL = KID_VAL(0) - KID_VAL(1); imm: O_MUL(imm,imm) # 0 # BN_VAL = KID_VAL(0) * KID_VAL(1); imm: O_LESS(imm,imm) # 0 # BN_VAL = KID_VAL(0) < KID_VAL(1) ? 1 : 0; imm: O_EQ(imm,imm) # 0 # BN_VAL = KID_VAL(0) == KID_VAL(1) ? 1 : 0; +imm: O_OR(imm,imm) # 0 # BN_VAL = KID_VAL(0) | KID_VAL(1); imm: O_NUM # 0 # imm: O_MONE # 0 # imm: O_MTWO # 0 # -- 2.25.1