From: jesusc Date: Fri, 27 Jul 2007 20:23:22 +0000 (+0000) Subject: src/SDCCglobl.h, src/SDCCpeeph.c, src/mcs51/main.c, src/mcs51/peeph.def: Added option... X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=c00c08ead23b7ae60d0c8788583f218d1d3e1828;p=fw%2Fsdcc src/SDCCglobl.h, src/SDCCpeeph.c, src/mcs51/main.c, src/mcs51/peeph.def: Added option --acall-ajmp: replaces lcall/ljmp with acall/ajmp git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@4888 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- diff --git a/ChangeLog b/ChangeLog index f10e1f59..c4a379b1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2007-07-27 Jesus Calvino-Fraga + + * 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 * configure.in, configure: re-introduced .version diff --git a/src/SDCCglobl.h b/src/SDCCglobl.h index 1df7886e..4f41446d 100644 --- a/src/SDCCglobl.h +++ b/src/SDCCglobl.h @@ -263,6 +263,7 @@ struct options 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 */ diff --git a/src/SDCCpeeph.c b/src/SDCCpeeph.c index 2a7e3f7a..afb6de55 100644 --- a/src/SDCCpeeph.c +++ b/src/SDCCpeeph.c @@ -133,8 +133,13 @@ FBYNAME (xramMovcOption) 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)); +} @@ -1205,6 +1210,9 @@ callFuncByName (char *fname, }, { "labelRefCountChange", labelRefCountChange + }, + { + "useAcallAjmp", useAcallAjmp } }; int i; diff --git a/src/mcs51/main.c b/src/mcs51/main.c index ef5407e8..5f378965 100644 --- a/src/mcs51/main.c +++ b/src/mcs51/main.c @@ -24,6 +24,7 @@ static OPTION _mcs51_options[] = { 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 } }; diff --git a/src/mcs51/peeph.def b/src/mcs51/peeph.def index e21e5f24..51e25122 100644 --- a/src/mcs51/peeph.def +++ b/src/mcs51/peeph.def @@ -4627,6 +4627,22 @@ replace { 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{