#endif
#define REGLEN 5
-static char *regsppc[] = {"14", "15", "16", "17", "18"};
+static char *regsppc[] = {"r10", "r11", "r12", "r13", "r14"};
/* ja, dirty.. */
static char *akt_func_name = (char*) NULL;
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.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);
akt_func_name = s;
need_stack = (vars || parms) && call;
/* restore link register */
printf("\tlwz 0,-8(1); mtlr 0\n");
}
- printf("\tblr\n\n\n");
+ printf("\tbx lr\n\n\n");
}
void move(char *src, char *dst)
{
if(src == (char*) NULL) return;
if(strcmp(src,dst) != 0) {
- printf("\tmr %s,%s\n", dst, src);
+ printf("\tmov %s,%s\n", dst, src);
}
}
char *param_reg(int num)
{
- char *regs[] = {"3", "4", "5", "6", "7", "8", "9", "10"};
+ char *regs[] = {"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9"};
return regs[num];
}
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));
}
printf("\tbl %s\n", bnode->name);
- move("3", BN_REG);
+ move("r0", BN_REG);
if(strcmp(BN_REG, "14")!=0) {
printf("\t#tmp register poppen\n");
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, "3");
+ret: O_RET(retexpr) # 2 # printf("\t@ o_ret(expr)\n"); move(BN_REG, "r0");
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);