Use 'ao-dbg' instead of 's51' to communicate with TeleMetrum
[fw/sdcc] / src / port.h
index e07d7a95ee00eda51d910c82275240e18723fc39..1533620f9e003e341a1e6478c895af0a5d7392c1 100644 (file)
@@ -8,6 +8,7 @@
 #include "SDCCicode.h"
 #include "SDCCargs.h"
 #include "SDCCpeeph.h"
+#include "dbuf.h"
 
 #define TARGET_ID_MCS51    1
 #define TARGET_ID_GBZ80    2
 /* Macro to test the target we are compiling for.
    Can only be used after SDCCmain has defined the port
 */
-#define TARGET_IS_MCS51 (port->id==TARGET_ID_MCS51)
-#define TARGET_IS_GBZ80 (port->id==TARGET_ID_GBZ80)
-#define TARGET_IS_Z80 (port->id==TARGET_ID_Z80)
-#define TARGET_IS_AVR (port->id==TARGET_ID_AVR)
-#define TARGET_IS_DS390 (port->id==TARGET_ID_DS390)
-#define TARGET_IS_DS400 (port->id==TARGET_ID_DS400)
-#define TARGET_IS_PIC   (port->id==TARGET_ID_PIC)
-#define TARGET_IS_PIC16 (port->id==TARGET_ID_PIC16)
-#define TARGET_IS_XA51 (port->id==TARGET_ID_XA51)
-#define TARGET_IS_HC08 (port->id==TARGET_ID_HC08)
+#define TARGET_IS_MCS51    (port->id==TARGET_ID_MCS51)
+#define TARGET_IS_GBZ80    (port->id==TARGET_ID_GBZ80)
+#define TARGET_IS_Z80      (port->id==TARGET_ID_Z80)
+#define TARGET_Z80_LIKE    (TARGET_IS_Z80 || TARGET_IS_GBZ80)
+#define TARGET_IS_AVR      (port->id==TARGET_ID_AVR)
+#define TARGET_IS_DS390    (port->id==TARGET_ID_DS390)
+#define TARGET_IS_DS400    (port->id==TARGET_ID_DS400)
+#define TARGET_IS_PIC      (port->id==TARGET_ID_PIC)
+#define TARGET_IS_PIC16    (port->id==TARGET_ID_PIC16)
+#define TARGET_IS_XA51     (port->id==TARGET_ID_XA51)
+#define TARGET_IS_HC08     (port->id==TARGET_ID_HC08)
+#define TARGET_MCS51_LIKE  (TARGET_IS_MCS51 || TARGET_IS_DS390 || TARGET_IS_DS400)
 
 #define MAX_BUILTIN_ARGS        16
 /* definition of builtin functions */
 typedef struct builtins
   {
     char *name;                         /* name of builtin function */
-    char *rtype;                        /* return type as string : see typefromStr */
+    char *rtype;                        /* return type as string : see typeFromStr */
     int  nParms;                        /* number of parms : max 8 */
     char *parm_types[MAX_BUILTIN_ARGS]; /* each parm type as string : see typeFromStr */
   } builtins;
@@ -64,10 +67,10 @@ typedef struct
 /** Unique id for this target */
     const int id;
 /** Target name used for -m */
-    const char *target;
+    const char * const target;
 
 /** Target name string, used for --help */
-    const char *target_name;
+    const char * const target_name;
 
 /** Specific processor for the given target family. specified by -p */
     char *processor;
@@ -131,6 +134,8 @@ typedef struct
         int (*getSize)(lineNode *line);
         bitVect * (*getRegsRead)(lineNode *line);
         bitVect * (*getRegsWritten)(lineNode *line);
+        bool (*deadMove) (const char *reg, lineNode *currPl, lineNode *head);
+        bool (*notUsed) (const char *reg, lineNode *currPl, lineNode *head);
       }
     peep;
 
@@ -163,25 +168,30 @@ typedef struct
 /** memory regions related stuff */
     struct
       {
-        const char *xstack_name;
-        const char *istack_name;
+        const char * const xstack_name;
+        const char * const istack_name;
+        /*
+         * The following 2 items can't be const pointers
+         * due to ugly implementation in z80 target;
+         * this should be fixed in src/z80/main.c (borutr)
+         */
         const char *code_name;
         const char *data_name;
-        const char *idata_name;
-        const char *pdata_name;
-        const char *xdata_name;
-        const char *bit_name;
-        const char *reg_name;
-        const char *static_name;
-        const char *overlay_name;
-        const char *post_static_name;
-        const char *home_name;
-        const char *xidata_name; // initialized xdata
-        const char *xinit_name; // a code copy of xidata
-        const char *const_name; // const data (code or not)
-        const char *cabs_name; // const absolute data (code or not)
-       const char *xabs_name; // absolute xdata/pdata
-       const char *iabs_name; // absolute idata/data
+        const char * const idata_name;
+        const char * const pdata_name;
+        const char * const xdata_name;
+        const char * const bit_name;
+        const char * const reg_name;
+        const char * const static_name;
+        const char * const overlay_name;
+        const char * const post_static_name;
+        const char * const home_name;
+        const char * const xidata_name; // initialized xdata
+        const char * const xinit_name; // a code copy of xidata
+        const char * const const_name; // const data (code or not)
+        const char * const cabs_name; // const absolute data (code or not)
+        const char * const xabs_name; // absolute xdata/pdata
+        const char * const iabs_name; // absolute idata/data
         struct memmap *default_local_map; // default location for auto vars
         struct memmap *default_globl_map; // default location for globl vars
         int code_ro;            /* code space read-only 1=yes */
@@ -293,7 +303,7 @@ typedef struct
      * it returns zero, default (8051) IVT generation code
      * will be used.
      */
-    int (*genIVT) (FILE * of, symbol ** intTable, int intCount);
+    int (*genIVT) (struct dbuf_s *oBuf, symbol ** intTable, int intCount);
 
     void (*genXINIT) (FILE * of);