ppc: sub statt subf
[uebersetzerbau-ss10.git] / gesamt_ppc / code.bfe
index cf141165fd5e171cb6436d662a0d35ad5c836d48..7fdc466892ba4d6e0b1e3289c2043147960f64bc 100644 (file)
@@ -45,7 +45,7 @@ void gen_e_eno(struct treenode *bnode, char *instr)
 #else
        KIDREG2PARM(0);
        KIDREG2PARM(1);
-       printf("\t%s %s,%s,%s\n", instr, BN_REG, KID_REG(1), KID_REG(0));
+       printf("\t%s %s,%s,%s\n", instr, BN_REG, KID_REG(0), KID_REG(1));
 #endif
 }
 
@@ -56,8 +56,8 @@ void gen_id_eno(struct treenode *bnode)
        KIDKIDREG2PARM(1,1);
        KIDREG2PARM(0);
        move(KID_REG(0), BN_REG);
-       printf("\tsubf %%%s, %%%s\n", KIDKID_REG(1,1), BN_REG);
-       printf("\tsubf %%%s, %%%s\n", KIDKID_REG(1,0), BN_REG);
+       printf("\tsub %%%s, %%%s\n", KIDKID_REG(1,1), BN_REG);
+       printf("\tsub %%%s, %%%s\n", KIDKID_REG(1,0), BN_REG);
 }
 
 void gen_e_field(struct treenode *bnode, char *instr)
@@ -89,12 +89,16 @@ void gen_e_imm(struct treenode *bnode, char *instr)
                        printf("\timulq $%d, %%%s, %%%s\n", KID_VAL(1), KID_REG(0), BN_REG);
                }
        } else {
-               if(strcmp(instr, "subf") == 0 && KID_VAL(1) == 0) {
+               if(strcmp(instr, "sub") == 0 && KID_VAL(1) == 0) {
                        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
+                       printf("\t%si %s,%s,%d\n", instr, BN_REG, KID_REG(0), KID_VAL(1));
+#endif
                }
        }
 }
@@ -128,7 +132,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 +159,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)
@@ -316,9 +330,9 @@ expr: O_ARG(expr,expr) # 1 # prep_arg(bnode, 1);
 expr: O_ARG(O_ID,expr) # 1 # prep_arg(bnode, 0);
 expr: O_NOTHING # 0 #
 
-expr: O_SUB(expr,expr)          # 2 # gen_e_eno(bnode, "subf");
-expr: O_SUB(expr,O_FIELD(expr)) # 2 # gen_e_field(bnode, "subf");
-expr: O_SUB(expr,imm)           # 1 # gen_e_imm(bnode, "subf");
+expr: O_SUB(expr,expr)          # 2 # gen_e_eno(bnode, "sub");
+expr: O_SUB(expr,O_FIELD(expr)) # 2 # gen_e_field(bnode, "sub");
+expr: O_SUB(expr,imm)           # 1 # gen_e_imm(bnode, "sub");
 
 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);