From 0c8c281d1815255063bed6d9915ea1db1ccb2581 Mon Sep 17 00:00:00 2001 From: Bernhard Urban Date: Tue, 18 May 2010 03:22:16 +0200 Subject: [PATCH] codea: super mega opt auch fuer konstante --- codea/code.bfe | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/codea/code.bfe b/codea/code.bfe index f51ccc2..84d8db4 100644 --- a/codea/code.bfe +++ b/codea/code.bfe @@ -149,13 +149,17 @@ void gen_lea(struct treenode *bnode, short e) } } -void gen_subspecial(struct treenode *bnode) +void gen_subspecial(struct treenode *bnode, short e) { /* tritt z.b. bei snafu_05.0 auf */ - printf("\t//gen_subspecial\n"); - KIDREG2ID(0); + printf("\t//gen_subspecial(%i)\n", e); + if (!e) + KIDREG2ID(0); KIDKIDREG2PARM(1,0); - printf("\tsubq %%%s, %%%s\n", KIDKID_REG(1,0), BN_REG); + if(e) + printf("\tsubq $%d, %%%s\n", KIDKID_VAL(1,0), BN_REG); + else + printf("\tsubq %%%s, %%%s\n", KIDKID_REG(1,0), BN_REG); printf("\taddq %%%s, %%%s\n", KIDKID_REG(1,1), BN_REG); } @@ -181,7 +185,8 @@ expr: O_SUB(expr,imm) # 2 # gen_e_imm(bnode, "subq"); expr: O_SUB(imm,expr) # 2 # gen_imm_eno(bnode, "subq"); expr: O_SUB(imm,O_FIELD(expr)) # 2 # gen_imm_field(bnode); -expr: O_SUB(expr,O_SUB(O_ID,expr)) # 2 # gen_subspecial(bnode); +expr: O_SUB(expr,O_SUB(O_ID,expr)) # 2 # gen_subspecial(bnode, 0); +expr: O_SUB(expr,O_SUB(imm,expr)) # 2 # gen_subspecial(bnode, 1); expr: O_SUB(expr,O_MUL(O_MONE,expr)) # 1 # gen_lea(bnode,0); expr: O_SUB(expr,O_MUL(O_MTWO,expr)) # 1 # gen_lea(bnode,0); -- 2.25.1