ppc: ein paar testfaelle mehr (bis einschliesslich codea_abgabe_ae.0)
authorBernhard Urban <lewurm@gmail.com>
Tue, 8 Jun 2010 02:03:32 +0000 (04:03 +0200)
committerBernhard Urban <lewurm@gmail.com>
Wed, 9 Jun 2010 18:35:48 +0000 (20:35 +0200)
gesamt_ppc/chelper.c
gesamt_ppc/code.bfe

index ce1ab671e311fa5af3e77d16e599d9e51681938e..84ef5bac03d3f6215bc5a3758a2782aec2163058 100644 (file)
@@ -49,9 +49,8 @@ void move(char *src, char *dst)
 
 void moveimm(long imm, char *dst)
 {
-       char buf[100];
-       sprintf(buf, "$%d", imm);
-       printf("\tmovq %s, %%%s\n", buf, dst);
+       /* TODO: 32 bits... */
+       printf("\taddi %s,0,%d\n", dst, imm);
 }
 
 char *next_reg(char *s, int params)
index cf141165fd5e171cb6436d662a0d35ad5c836d48..d67847a02cfa69b7f125e519c7c34c3dbe01bbf5 100644 (file)
@@ -93,8 +93,13 @@ void gen_e_imm(struct treenode *bnode, char *instr)
                        printf("\t#subtraktion mit 0 wegoptimiert\n");
                        move(KID_REG(0), BN_REG);
                } else {
+#if 0
                        move(KID_REG(0), BN_REG);
                        printf("\t%s $%d, %%%s\n", instr, KID_VAL(1), BN_REG);
+#else
+                       /* subf only */
+                       printf("\taddi %s,%s,%d\n", BN_REG, KID_REG(0), -1*KID_VAL(1));
+#endif
                }
        }
 }
@@ -128,7 +133,8 @@ void gen_imm_eno(struct treenode *bnode, char *instr)
 
 void gen_eqless(struct treenode *bnode, char *op, short e0, short e1, short deep)
 {
-       printf("\t#gen_eqless_%i%i @ %i\n", e0, e1, deep);
+       printf("\t#gen_eqless_%i%i @ %i (op: %s)\n", e0, e1, deep, op);
+#if 0
        if(e0) { KIDREG2PARM(0); } else { KIDREG2ID(0); }
        if(e1) { KIDREG2PARM(1); } else { KIDREG2ID(1); }
 
@@ -154,6 +160,15 @@ void gen_eqless(struct treenode *bnode, char *op, short e0, short e1, short deep
        }
        printf("\tset%s %%%s\n", op, reg_64to8l(BN_REG));
        printf("\tand $1, %%%s\n", BN_REG);
+#else
+       if(e0) { KIDREG2PARM(0); } else { KIDREG2ID(0); }
+       if(e1) { KIDREG2PARM(1); } else { KIDREG2ID(1); }
+       if(strcmp(op,"e")==0 && KID_VAL(1) == 0) {
+               /* not */
+               printf("\tcntlzw %s,%s\n", KID_REG(0), KID_REG(0));
+               printf("\tsrwi %s,%s,5\n", BN_REG, KID_REG(0));
+       }
+#endif
 }
 
 void gen_lea(struct treenode *bnode, short e)