arm64: codea/abgabe_aa.0 master
authorBernhard Urban <lewurm@gmail.com>
Sat, 26 Jan 2013 21:38:21 +0000 (22:38 +0100)
committerBernhard Urban <lewurm@gmail.com>
Sat, 26 Jan 2013 21:38:21 +0000 (22:38 +0100)
simple return...

gesamt_arm64/chelper.c
gesamt_arm64/code.bfe

index 20e81bffd435e389df1e2487f43d2c33b5d75bf5..a8c6820e3b0aab30b5da90a284e9082be20aa052 100644 (file)
@@ -10,7 +10,7 @@
 
 /* TODO */
 #define REGLEN 5
-static char *regsppc[] = {"r10", "r11", "r12", "r13", "r14"};
+static char *regsppc[] = {"x10", "x11", "x12", "x13", "x14"};
 
 /* ja, dirty.. */
 static char *akt_func_name = (char*) NULL;
@@ -18,8 +18,8 @@ static char need_stack = 0;
 
 void func_header(char *s, int vars, int parms, int call)
 {
-       printf("\t.globl %1$s\n\t.type %1$s, %%function\n%1$s:\n", s);
-       printf("\t@ vars: %i, parms: %i, call(bool): %i\n", vars, parms, call);
+       printf("\t.global %1$s\n\t.type %1$s, %%function\n%1$s:\n", s);
+       printf("\t// vars: %i, parms: %i, call(bool): %i\n", vars, parms, call);
        akt_func_name = s;
 
        need_stack = (vars || parms) && call;
@@ -44,7 +44,7 @@ void func_footer(void)
                /* restore link register */
                printf("\tlwz 0,-8(1); mtlr 0\n");
        }
-       printf("\tbx lr\n\n\n");
+       printf("\tret\n\n\n");
 }
 
 void move(char *src, char *dst)
@@ -91,7 +91,7 @@ char *reg_64to8l(char *s)
 
 char *param_reg(int num)
 {      /* TODO */
-       char *regs[] = {"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9"};
+       char *regs[] = {"x0", "x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9"};
        return regs[num];
 }
 
index 05bd2157837995e32c5581d112d2bd3998eb35a8..c57feff5ec0dd470a78a4ca69294e2932dc1ac0a 100644 (file)
@@ -37,7 +37,7 @@
 
 void gen_e_eno(struct treenode *bnode, char *instr)
 {
-       printf("\t@ gen_e_eno(%s)\n", instr);
+       printf("\t// gen_e_eno(%s)\n", instr);
        KIDREG2PARM(0);
        KIDREG2PARM(1);
        printf("\t%s %s, %s, %s\n", instr, BN_REG, KID_REG(0), KID_REG(1));
@@ -45,7 +45,7 @@ void gen_e_eno(struct treenode *bnode, char *instr)
 
 void gen_id_eno(struct treenode *bnode)
 {
-       printf("\t@gen_id_eno\n");
+       printf("\t//gen_id_eno\n");
        KIDKIDREG2PARM(1,0);
        KIDKIDREG2PARM(1,1);
        KIDREG2PARM(0);
@@ -56,13 +56,13 @@ void gen_id_eno(struct treenode *bnode)
 
 void gen_e_imm(struct treenode *bnode, char *instr)
 {
-       printf("\t@gen_e_imm(%s)\n", instr);
+       printf("\t//gen_e_imm(%s)\n", instr);
        KIDREG2PARM(0);
        KIDREG2ID(1);
        /* man kann sich ein move der konstante bei der multiplikation ersparen */
        if(strcmp(instr, "mullw") == 0) {
                if(KID_VAL(1) == 1 && strcmp(KID_REG(0), BN_REG) == 0) {
-                       printf("\t@multiplikation mit 1 wegoptimiert\n");
+                       printf("\t//multiplikation mit 1 wegoptimiert\n");
                } else {
                        if(KID_VAL(1) > (65536)-1 || KID_VAL(1) < -65536) {
                                moveimm(KID_VAL(1), next_reg(BN_REG,0));
@@ -73,7 +73,7 @@ void gen_e_imm(struct treenode *bnode, char *instr)
                }
        } else {
                if(strcmp(instr, "sub") == 0 && KID_VAL(1) == 0) {
-                       printf("\t@subtraktion mit 0 wegoptimiert\n");
+                       printf("\t//subtraktion mit 0 wegoptimiert\n");
                        move(KID_REG(0), BN_REG);
                } else {
                        if(KID_VAL(1) > (65536)-1 || KID_VAL(1) < -65536) {
@@ -88,13 +88,13 @@ void gen_e_imm(struct treenode *bnode, char *instr)
 
 void gen_imm_eno(struct treenode *bnode, char *instr)
 {
-       printf("\t@gen_imm_eno(%s)\n", instr);
+       printf("\t//gen_imm_eno(%s)\n", instr);
        KIDREG2ID(0);
        KIDREG2PARM(1);
        /* man kann sich ein move der konstante bei der multiplikation ersparen */
        if(strcmp(instr, "mul") == 0) {
                if(KID_VAL(0) == 1 && strcmp(KID_REG(1), BN_REG) == 0) {
-                       printf("\t@multiplikation mit 1 wegoptimiert\n");
+                       printf("\t//multiplikation mit 1 wegoptimiert\n");
                } else {
                        if(KID_VAL(0) > (65536)-1 || KID_VAL(0) < -65536) {
                                moveimm(KID_VAL(0), next_reg(BN_REG,0));
@@ -111,7 +111,7 @@ 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 (op: %s)\n", e0, e1, deep, op);
+       printf("\t//gen_eqless_%i%i // %i (op: %s)\n", e0, e1, deep, op);
        if(e0) { KIDREG2PARM(0); } else { moveimm(KID_VAL(0), BN_REG); }
        if(e1) { KIDREG2PARM(1); }
        if(strcmp(op,"e")==0 && bnode->kids[1]->op == O_NULL) {
@@ -140,11 +140,11 @@ void gen_eqless(struct treenode *bnode, char *op, short e0, short e1, short deep
 void gen_subspecial(struct treenode *bnode, short e)
 {
        /* tritt z.b. bei snafu_05.0 auf */
-       printf("\t@gen_subspecial(%i)\n", e);
+       printf("\t//gen_subspecial(%i)\n", e);
        KIDREG2ID(0);
        KIDKIDREG2PARM(1,0);
 
-       /* TODO: Loong@ codea_snafu_03.0 */
+       /* TODO: Loong// codea_snafu_03.0 */
 
        if(e) {
                if(KIDKID_VAL(1,0) != 0) {
@@ -159,7 +159,7 @@ void gen_subspecial(struct treenode *bnode, short e)
 
 void assign_var(struct treenode *bnode)
 {
-       printf("\t@assign_var\n");
+       printf("\t//assign_var\n");
        KIDREG2PARM(1);
        if (strcmp(bnode->kids[0]->kids[0]->name, bnode->kids[1]->name) != 0) {
                KIDKIDREG2PARM(0,0);
@@ -173,7 +173,7 @@ static short sc[8] = {0};
 void make_call(struct treenode *bnode)
 {
        int j;
-       printf("\t@params pushen\n");
+       printf("\t//params pushen\n");
        for(j = 0; j < bnode->soffset; j++) {
                if(sc[j] == 1) {
                        printf("\tlwz 20,%d(1)\n", j*4);
@@ -183,14 +183,14 @@ void make_call(struct treenode *bnode)
                        printf("\tstw %s,%d(1)\n", param_reg(j), j*4);
                }
        }
-       printf("\t@vars pushen\n");
+       printf("\t//vars pushen\n");
        for(j = bnode->soffset; j < bnode->soffset + bnode->vars; j++) {
                printf("\tstw %s,%d(1)\n", param_reg(j), j*4);
        }
 
        /* TODO: schoener machen... */
        if(strcmp(BN_REG, "14")!=0) {
-               printf("\t@tmp register pushen\n");
+               printf("\t//tmp register pushen\n");
                printf("\tstw 14,52(1)\n");
                if(strcmp(BN_REG, "15")!=0) {
                        printf("\tstw 15,56(1)\n");
@@ -204,7 +204,7 @@ void make_call(struct treenode *bnode)
        move("r0", BN_REG);
 
        if(strcmp(BN_REG, "14")!=0) {
-               printf("\t@tmp register poppen\n");
+               printf("\t//tmp register poppen\n");
                if(strcmp(BN_REG, "15")!=0) {
                        if(strcmp(BN_REG, "16")!=0) {
                                printf("\tlwz 16,60(1)\n");
@@ -214,12 +214,12 @@ void make_call(struct treenode *bnode)
                printf("\tlwz 14,52(1)\n");
        }
 
-       printf("\t@vars poppen\n");
+       printf("\t//vars poppen\n");
        for(j = bnode->soffset + bnode->vars - 1; j > bnode->soffset - 1; j--) {
                printf("\tlwz %s,%d(1)\n", param_reg(j), j*4);
        }
 
-       printf("\t@params poppen\n");
+       printf("\t//params poppen\n");
        for(j = bnode->soffset - 1; j >= 0; j--) {
                if(sc[j] == 0)
                        printf("\tlwz %s,%d(1)\n", param_reg(j), j*4);
@@ -236,7 +236,7 @@ void make_call(struct treenode *bnode)
 
 void prep_arg(struct treenode *bnode, int moveit)
 {
-       printf("\t@args-nr-> %i (%%%s) [moveit= %i]\n", bnode->soffset, param_reg(bnode->soffset), moveit);
+       printf("\t//args-nr-> %i (%%%s) [moveit= %i]\n", bnode->soffset, param_reg(bnode->soffset), moveit);
        sc[bnode->soffset] = 1;
        if(moveit) { /* expr */
                if((BN_REG == (char *) NULL) || (bnode->kids[1] != TREENULL && bnode->kids[1]->op == O_ID && bnode->kids[1]->kids[0] == TREENULL && bnode->kids[1]->kids[1] == TREENULL)) {
@@ -258,14 +258,14 @@ void prep_arg(struct treenode *bnode, int moveit)
 
 void field_lolbfefail(struct treenode *bnode)
 {
-       printf("\t@ field(expr)\n");
+       printf("\t// field(expr)\n");
        KIDREG2PARM(0);
        printf("\tldr %s, [%s, #%d]\n", BN_REG, KID_REG(0), bnode->soffset * 4);
 }
 
 void field_lolbfefail_imm(struct treenode *bnode)
 {
-       printf("\t@ field(imm)\n");
+       printf("\t// field(imm)\n");
        moveimm(KID_VAL(0), BN_REG);
        printf("\tlwz %s, [%s, #%d]\n", BN_REG, BN_REG, bnode->soffset * 4);
 }
@@ -299,10 +299,10 @@ ifstat: O_IF(expr) # 2 # /* iburg beschummeln :/ */ printf("\tcmpwi %s,0\n", BN_
 ifstat: O_IF(O_BOOL(expr)) # 1 # /* dann braucht man kein test */
 
 
-ret: O_RET(retexpr) # 2 # printf("\t@ o_ret(expr)\n"); move(BN_REG, "r0");
+ret: O_RET(retexpr) # 2 # printf("\t// o_ret(expr)\n"); move(BN_REG, "x0");
 ret: O_EXPR(expr) # 0 #
 
-retexpr: O_ID # 1 # printf("\t@*retexpr*/\n"); if(bnode->param_index > -1) move(param_reg(bnode->param_index), BN_REG);
+retexpr: O_ID # 1 # printf("\t//*retexpr*/\n"); if(bnode->param_index > -1) move(param_reg(bnode->param_index), BN_REG);
 retexpr: expr