#define DDCHELP
#endif
+/* TODO */
#define REGLEN 5
static char *regsppc[] = {"r10", "r11", "r12", "r13", "r14"};
{
if(src == (char*) NULL) return;
if(strcmp(src,dst) != 0) {
- printf("\tmov %s,%s\n", dst, src);
+ printf("\tmov %s, %s\n", dst, src);
}
}
void moveimm(long imm, char *dst)
{
+ static int constlbl = 1;
if((imm > 65536-1) || (imm < -65536)) {
- /* high word */
- printf("\tlis %s,%d@ha\n", dst, imm);
- /* low word */
- printf("\taddi %s,%s,%d@l\n", dst, dst, imm);
+ printf("\t.align 2\n\t.CONSTLBL%i\n\t.word %i\n", constlbl++);
+ printf("\tldr %s, .CONSTLBL%i\n", dst, constlbl);
} else {
/* just low word */
- printf("\tli %s,%d@l\n", dst, imm);
+ printf("\t%s %s, #%d\n", imm >= 0 ? "mov" : "mvn", dst, imm >= 0 ? imm : (-1 * imm) - 1);
}
}
}
char *param_reg(int num)
-{
+{ /* TODO */
char *regs[] = {"r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", "r8", "r9"};
return regs[num];
}