+2007-07-27 Jesus Calvino-Fraga <jesusc at ece.ubc.ca>
+
+ * src/SDCCglobl.h, src/SDCCpeeph.c, src/mcs51/main.c, src/mcs51/peeph.def:
+ Added option --acall-ajmp: replaces lcall/ljmp with acall/ajmp.
+
2007-07-22 Borut Razem <borut.razem AT siol.net>
* configure.in, configure: re-introduced .version
int parms_in_bank1; /* DS390 - use reg bank1 to pass parameters */
int stack_size; /* MCS51/DS390 - Tells the linker to allocate this space for stack */
int no_pack_iram; /* MCS51/DS390 - Tells the linker not to pack variables in internal ram */
+ int acall_ajmp; /* MCS51 - Use acall/ajmp instead of lcall/ljmp */
/* starting address of the segments */
int xstack_loc; /* initial location of external stack */
int stack_loc; /* initial value of internal stack pointer */
return (options.xram_movc && (strcmp(port->target,"mcs51") == 0));
}
-
-
+/*-----------------------------------------------------------------*/
+/* useAcallAjmp - Enable replacement of lcall/ljmp with acall/ajmp */
+/*-----------------------------------------------------------------*/
+FBYNAME (useAcallAjmp)
+{
+ return (options.acall_ajmp && (strcmp(port->target,"mcs51") == 0));
+}
},
{
"labelRefCountChange", labelRefCountChange
+ },
+ {
+ "useAcallAjmp", useAcallAjmp
}
};
int i;
{ 0, "--parms-in-bank1", &options.parms_in_bank1, "use Bank1 for parameter passing"},
{ 0, "--pack-iram", NULL, "Tells the linker to pack variables in internal ram (default)"},
{ 0, "--no-pack-iram", &options.no_pack_iram, "Tells the linker not to pack variables in internal ram"},
+ { 0, "--acall-ajmp", &options.acall_ajmp, "Use acall/ajmp instead of lcall/ljmp" },
{ 0, NULL }
};
ret
}
+// for programs less than 2k
+replace {
+ lcall %1
+} by {
+ ; Peephole 400.d replaced lcall with acall
+ acall %1
+} if useAcallAjmp
+
+// for programs less than 2k
+replace {
+ ljmp %1
+} by {
+ ; Peephole 400.e replaced ljmp with ajmp
+ ajmp %1
+} if useAcallAjmp
+
// should be one of the last peepholes
replace{