(optionally) push static array initialization down to the ports code generator
[fw/sdcc] / src / mcs51 / main.c
index c9f6cd7f5633b60fc10928b5e70fd9ceb0c9d868..c06d08a9c6d0b0f6b44360da588127be7f522fe1 100644 (file)
@@ -39,6 +39,7 @@ static char *_mcs51_keywords[] =
   "_xdata",
   "_pdata",
   "_idata",
+  "_naked",
   NULL
 };
 
@@ -83,32 +84,7 @@ _mcs51_parseOptions (int *pargc, char **argv, int *i)
 static void
 _mcs51_finaliseOptions (void)
 {
-  /* Hack-o-matic: if we are using the flat24 model,
-   * adjust pointer sizes.
-   */
-  if (options.model == MODEL_FLAT24)
-    {
-
-      fprintf (stderr, "*** WARNING: you should use the '-mds390' option "
-              "for DS80C390 support. This code generator is "
-              "badly out of date and probably broken.\n");
-
-      port->s.fptr_size = 3;
-      port->s.gptr_size = 4;
-      port->stack.isr_overhead++;      /* Will save dpx on ISR entry. */
-#if 1
-      port->stack.call_overhead++;     /* This acounts for the extra byte 
-                                        * of return addres on the stack.
-                                        * but is ugly. There must be a 
-                                        * better way.
-                                        */
-#endif
-      fReturn = fReturn390;
-      fReturnSize = 5;
-    }
-
-  if (options.model == MODEL_LARGE)
-    {
+  if (options.model == MODEL_LARGE) {
       port->mem.default_local_map = xdata;
       port->mem.default_globl_map = xdata;
     }
@@ -117,25 +93,6 @@ _mcs51_finaliseOptions (void)
       port->mem.default_local_map = data;
       port->mem.default_globl_map = data;
     }
-
-  if (options.stack10bit)
-    {
-      if (options.model != MODEL_FLAT24)
-       {
-         fprintf (stderr,
-                  "*** warning: 10 bit stack mode is only supported in flat24 model.\n");
-         fprintf (stderr, "\t10 bit stack mode disabled.\n");
-         options.stack10bit = 0;
-       }
-      else
-       {
-         /* Fixup the memory map for the stack; it is now in
-          * far space and requires a FPOINTER to access it.
-          */
-         istack->fmap = 1;
-         istack->ptrType = FPOINTER;
-       }
-    }
 }
 
 static void
@@ -154,45 +111,13 @@ _mcs51_getRegName (struct regs *reg)
 static void
 _mcs51_genAssemblerPreamble (FILE * of)
 {
-  if (options.model == MODEL_FLAT24)
-    {
-      fputs (".flat24 on\t\t; 24 bit flat addressing\n", of);
-      fputs ("dpx = 0x93\t\t; dpx register unknown to assembler\n", of);
-      fputs ("dps = 0x86\t\t; dps register unknown to assembler\n", of);
-      fputs ("dpl1 = 0x84\t\t; dpl1 register unknown to assembler\n", of);
-      fputs ("dph1 = 0x85\t\t; dph1 register unknown to assembler\n", of);
-      fputs ("dpx1 = 0x95\t\t; dpx1 register unknown to assembler\n", of);
-    }
 }
 
 /* Generate interrupt vector table. */
 static int
 _mcs51_genIVT (FILE * of, symbol ** interrupts, int maxInterrupts)
 {
-  int i;
-
-  if (options.model != MODEL_FLAT24)
-    {
-      /* Let the default code handle it. */
-      return FALSE;
-    }
-
-  fprintf (of, "\tajmp\t__sdcc_gsinit_startup\n");
-
-  /* now for the other interrupts */
-  for (i = 0; i < maxInterrupts; i++)
-    {
-      if (interrupts[i])
-       {
-         fprintf (of, "\tljmp\t%s\n\t.ds\t4\n", interrupts[i]->rname);
-       }
-      else
-       {
-         fprintf (of, "\treti\n\t.ds\t7\n");
-       }
-    }
-
-  return TRUE;
+  return FALSE;
 }
 
 /** $1 is always the basename.
@@ -208,24 +133,26 @@ static const char *_linkCmd[] =
 
 static const char *_asmCmd[] =
 {
-  "asx8051", "-plosgffc", "$1.asm", NULL
+  "asx8051", "$l", "-plosgffc", "$1.asm", NULL
 };
 
 /* Globals */
 PORT mcs51_port =
 {
+  TARGET_ID_MCS51,
   "mcs51",
   "MCU 8051",                  /* Target name */
   {
     TRUE,                      /* Emit glue around main */
-    MODEL_SMALL | MODEL_LARGE | MODEL_FLAT24,
+    MODEL_SMALL | MODEL_LARGE,
     MODEL_SMALL
   },
   {
     _asmCmd,
     "-plosgffc",               /* Options with debug */
     "-plosgff",                        /* Options without debug */
-    0
+    0,
+    ".asm"
   },
   {
     _linkCmd,
@@ -237,7 +164,7 @@ PORT mcs51_port =
   },
   {
        /* Sizes: char, short, int, long, ptr, fptr, gptr, bit, float, max */
-    1, 1, 2, 4, 1, 2, 3, 1, 4, 4
+    1, 2, 2, 4, 1, 2, 3, 1, 4, 4
   },
   {
     "XSEG    (XDATA)",
@@ -261,7 +188,7 @@ PORT mcs51_port =
   },
     /* mcs51 has an 8 bit mul */
   {
-    1, 0
+    1, -1
   },
   "_",
   _mcs51_init,
@@ -276,6 +203,7 @@ PORT mcs51_port =
   _mcs51_reset_regparm,
   _mcs51_regparm,
   NULL,
+  NULL,
   FALSE,
   0,                           /* leave lt */
   0,                           /* leave gt */
@@ -283,5 +211,6 @@ PORT mcs51_port =
   1,                           /* transform >= to ! < */
   1,                           /* transform != to !(a == b) */
   0,                           /* leave == */
+  FALSE,                        /* No array initializer support. */
   PORT_MAGIC
 };