From 683cc125e0892ef966e4902c535f971c98589c4c Mon Sep 17 00:00:00 2001 From: Bernhard Urban Date: Sat, 26 Jan 2013 22:38:21 +0100 Subject: [PATCH] arm64: codea/abgabe_aa.0 simple return... --- gesamt_arm64/chelper.c | 10 +++++----- gesamt_arm64/code.bfe | 44 +++++++++++++++++++++--------------------- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/gesamt_arm64/chelper.c b/gesamt_arm64/chelper.c index 20e81bf..a8c6820 100644 --- a/gesamt_arm64/chelper.c +++ b/gesamt_arm64/chelper.c @@ -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]; } diff --git a/gesamt_arm64/code.bfe b/gesamt_arm64/code.bfe index 05bd215..c57feff 100644 --- a/gesamt_arm64/code.bfe +++ b/gesamt_arm64/code.bfe @@ -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 -- 2.25.1