projects
/
uebersetzerbau-ss10.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
b871b3e
)
codea: konstante bei mul und add wegoptimieren
author
Bernhard Urban
<lewurm@gmail.com>
Mon, 17 May 2010 22:25:26 +0000
(
00:25
+0200)
committer
Bernhard Urban
<lewurm@gmail.com>
Mon, 17 May 2010 22:25:26 +0000
(
00:25
+0200)
codea/code.bfe
patch
|
blob
|
history
diff --git
a/codea/code.bfe
b/codea/code.bfe
index b00bdfebde1f1858501e6ed72345d9d4a1540bb7..377082dfc93676bad846a6dd75190e1268433540 100644
(file)
--- a/
codea/code.bfe
+++ b/
codea/code.bfe
@@
-47,10
+47,19
@@
void gen_e_imm(struct treenode *bnode, char *instr)
KIDREG2ID(1);
/* man kann sich ein move der konstante bei der multiplikation ersparen */
if(strcmp(instr, "imulq") == 0) {
KIDREG2ID(1);
/* man kann sich ein move der konstante bei der multiplikation ersparen */
if(strcmp(instr, "imulq") == 0) {
- printf("\timulq $%d, %%%s, %%%s\n", KID_VAL(1), KID_REG(0), BN_REG);
+ if(KID_VAL(1) == 1 && strcmp(KID_REG(0), BN_REG) == 0) {
+ printf("\t//multiplikation mit 1 wegoptimiert\n");
+ } else {
+ printf("\timulq $%d, %%%s, %%%s\n", KID_VAL(1), KID_REG(0), BN_REG);
+ }
} else {
} else {
- printf("\t%s $%d, %%%s\n", instr, KID_VAL(1), KID_REG(0));
- move(KID_REG(0), BN_REG);
+ if(strcmp(instr, "subq") == 0 && KID_VAL(1) == 0) {
+ printf("\t//subtraktion mit 0 wegoptimiert\n");
+ move(KID_REG(0), BN_REG);
+ } else {
+ printf("\t%s $%d, %%%s\n", instr, KID_VAL(1), KID_REG(0));
+ move(KID_REG(0), BN_REG);
+ }
}
}
}
}
@@
-61,7
+70,11
@@
void gen_imm_eno(struct treenode *bnode, char *instr)
KIDREG2PARM(1);
/* man kann sich ein move der konstante bei der multiplikation ersparen */
if(strcmp(instr, "imulq") == 0) {
KIDREG2PARM(1);
/* man kann sich ein move der konstante bei der multiplikation ersparen */
if(strcmp(instr, "imulq") == 0) {
- printf("\timulq $%d, %%%s, %%%s\n", KID_VAL(0), KID_REG(1), BN_REG);
+ if(KID_VAL(0) == 1 && strcmp(KID_REG(1), BN_REG) == 0) {
+ printf("\t//multiplikation mit 1 wegoptimiert\n");
+ } else {
+ printf("\timulq $%d, %%%s, %%%s\n", KID_VAL(0), KID_REG(1), BN_REG);
+ }
} else if(strcmp(instr, "addq") == 0) {
printf("\taddq $%d, %%%s\n", KID_VAL(0), BN_REG);
} else { /* subq */
} else if(strcmp(instr, "addq") == 0) {
printf("\taddq $%d, %%%s\n", KID_VAL(0), BN_REG);
} else { /* subq */