src/SDCCglobl.h, src/SDCCpeeph.c, src/mcs51/main.c, src/mcs51/peeph.def: Added option...
authorjesusc <jesusc@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Fri, 27 Jul 2007 20:23:22 +0000 (20:23 +0000)
committerjesusc <jesusc@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Fri, 27 Jul 2007 20:23:22 +0000 (20:23 +0000)
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@4888 4a8a32a2-be11-0410-ad9d-d568d2c75423

ChangeLog
src/SDCCglobl.h
src/SDCCpeeph.c
src/mcs51/main.c
src/mcs51/peeph.def

index f10e1f59d9be366ce0d87772f92f05c7e093b2e5..c4a379b1c91d4ac855c5c5f61834af3e75b725eb 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+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
index 1df7886e35036b4dc9cd874ae20a7380340364ce..4f41446d70f82b54f60e9fcecae495c564ae22a1 100644 (file)
@@ -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 */
index 2a7e3f7ac03a88a174097e2be016611c3bc3c1af..afb6de558f3f12b3cbfb5ffbd7925894cf7f0f4f 100644 (file)
@@ -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;
index ef5407e8cfe1126d4eaa4ac7c85fb626ebb34f95..5f378965e9976fb07f1cdfbfc097134af1525cf6 100644 (file)
@@ -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 }
   };
 
index e21e5f24b66eb4f0516b3bd633ee6b3f4636c349..51e251225c6122972dee40d09b6609f7d310ae41 100644 (file)
@@ -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{