{NULL, NULL}
};
+static const ASM_MAPPING _xa_asm_mapping[] =
+{
+ {"labeldef", "%s:"},
+ {"slabeldef", "%s:"},
+ {"tlabeldef", "L%05d:"},
+ {"tlabel", "L%05d"},
+ {"immed", "#"},
+ {"zero", "#0"},
+ {"one", "#1"},
+ {"area", ".area %s"},
+ {"areacode", ".area %s"},
+ {"areadata", ".area %s"},
+ {"areahome", ".area %s"},
+ {"ascii", ".db \"%s\""},
+ {"ds", ".ds %d"},
+ {"db", ".db"},
+ {"dbs", ".db \"%s\""},
+ {"dw", ".dw"},
+ {"dws", ".dw %s"},
+ {"constbyte", "0%02xh"},
+ {"constword", "0%04xh"},
+ {"immedword", "#0%04Xh"},
+ {"immedbyte", "#0%02Xh"},
+ {"hashedstr", "#%s"},
+ {"lsbimmeds", "#<%s"},
+ {"msbimmeds", "#>%s"},
+ {"module", ".module %s"},
+ {"global", ".globl %s"},
+ {"fileprelude", ""},
+ {"functionheader",
+ "; ---------------------------------\n"
+ "; Function %s\n"
+ "; ---------------------------------"
+ },
+ {"functionlabeldef", "%s:"},
+ {"bankimmeds", "0 ; PENDING: bank support"},
+ {"los","(%s & 0FFh)"},
+ {"his","((%s / 256) & 0FFh)"},
+ {"hihis","((%s / 65536) & 0FFh)"},
+ {"hihihis","((%s / 16777216) & 0FFh)"},
+ {"lod","(%d & 0FFh)"},
+ {"hid","((%d / 256) & 0FFh)"},
+ {"hihid","((%d / 65536) & 0FFh)"},
+ {"hihihid","((%d / 16777216) & 0FFh)"},
+ {"lol","(L%05d & 0FFh)"},
+ {"hil","((L%05d / 256) & 0FFh)"},
+ {"hihil","((L%05d / 65536) & 0FFh)"},
+ {"hihihil","((L%09d / 16777216) & 0FFh)"},
+ {"equ"," equ"},
+ {NULL, NULL}
+};
+
const ASM_MAPPINGS asm_asxxxx_mapping =
{
NULL,
NULL,
_a390_mapping
};
+
+const ASM_MAPPINGS asm_xa_asm_mapping =
+{
+ NULL,
+ _xa_asm_mapping
+};
} else {
instr=MOVW;
}
- emitcode (instr, "%s,[%s]", AOP_NAME(result)[0], AOP_NAME(left)[0]);
+ // if result=onstack
+ if (AOP_TYPE(result)==AOP_STK) {
+ emitcode (instr, "r0,[%s]", AOP_NAME(left)[0]);
+ emitcode (instr, "%s,r0", AOP_NAME(result)[0]);
+ } else {
+ emitcode (instr, "%s,[%s]", AOP_NAME(result)[0], AOP_NAME(left)[0]);
+ }
if (AOP_SIZE(result) > 2) {
// result is generic pointer
sym_link *optype=operandType(left);
emitcode ("mov", "%s,r0", AOP_NAME(result)[0]);
}
} else {
- if (AOP_SIZE(result)==3) {
+ if (AOP_SIZE(result)==1) {
emitcode ("mov.b", "%s,%s", AOP_NAME(result)[0], AOP_NAME(left)[0]);
} else {
emitcode ("mov.w", "%s,%s", AOP_NAME(result)[0], AOP_NAME(left)[0]);
} else {
instr=MOVW;
}
- emitcode (instr, "%s,%s",
- result->aop->name[0], right->aop->name[0]);
+ if (AOP_TYPE(right)==AOP_STK && AOP_TYPE(result)==AOP_STK) {
+ emitcode (instr, "%s,%s", size==1 ? "r0l":"r0", right->aop->name[0]);
+ emitcode (instr, "%s,%s", AOP_NAME(result)[0], size==1 ? "r0l":"r0");
+ } else {
+ emitcode (instr, "%s,%s",
+ result->aop->name[0], right->aop->name[0]);
+ }
if (AOP_SIZE(result) > 2) {
+ if (AOP_TYPE(right)==AOP_LIT) {
+ emitcode (instr, "%s,%s", result->aop->name[1],
+ *AOP_NAME(right)[1] ? AOP_NAME(right)[1] : "#0x00");
+ return;
+ }
if (size==3) {
instr=MOVB;
} else {
instr=MOVW;
}
- emitcode (instr, "%s,%s",
- result->aop->name[1], right->aop->name[1]);
+ if (AOP_TYPE(right)==AOP_STK && AOP_TYPE(result)==AOP_STK) {
+ emitcode (instr, "%s,%s", size==1 ? "r0l":"r0", right->aop->name[1]);
+ emitcode (instr, "%s,%s", AOP_NAME(result)[1], size==1 ? "r0l":"r0");
+ } else {
+ emitcode (instr, "%s,%s",
+ result->aop->name[1], right->aop->name[1]);
+ }
+ return;
}
-
}
/*-----------------------------------------------------------------*/