missing files for "added seperate segments for initialized data"
[fw/sdcc] / src / port.h
index 0e6459b77aa44c12008ee7b363e6532ebced1c4f..88f764ad54706a724ba06a201c638635ef18b42a 100644 (file)
@@ -5,6 +5,8 @@
 #ifndef PORT_INCLUDE
 #define PORT_INCLUDE
 
+#include "SDCCicode.h"
+
 #define TARGET_ID_MCS51    1
 #define TARGET_ID_GBZ80    2
 #define TARGET_ID_Z80      3
 #define TARGET_IS_I186 (port->id==TARGET_ID_I186)
 #define TARGET_IS_TCLS900H (port->id==TARGET_ID_TCLS900H)
 
+#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 */
+    int  nParms;               /* number of parms : max 8 */
+    char *parm_types[MAX_BUILTIN_ARGS]; /* each parm type as string : see typeFromStr */
+} builtins ;
+
 /* Processor specific names */
 typedef struct
   {
@@ -55,11 +67,13 @@ typedef struct
     /* assembler related information */
     struct
       {
-/** Command to run and arguments (eg as-z80) */
-       const char **cmd;
-/** Arguments for debug mode.  PENDING: ignored */
+        /** Command to run and arguments (eg as-z80) */
+        const char **cmd;
+        /** Alternate macro based form. */
+        const char *mcmd;
+        /** Arguments for debug mode. */
        const char *debug_opts;
-/** Arguments for normal assembly mode.  PENDING: ignored */
+        /** Arguments for normal assembly mode. */
        const char *plain_opts;
        /* print externs as global */
        int externGlobal;
@@ -71,11 +85,13 @@ typedef struct
     /* linker related info */
     struct
       {
-/** Command to run (eg link-z80) */
+        /** Command to run (eg link-z80) */
        const char **cmd;
-/** If non-null will be used to execute the link. */
+        /** Alternate macro based form. */
+        const char *mcmd;
+        /** If non-null will be used to execute the link. */
        void (*do_link) (void);
-/** Extention for object files (.rel, .obj, ...) */
+        /** Extention for object files (.rel, .obj, ...) */
        const char *rel_ext;
       }
     linker;
@@ -118,8 +134,10 @@ typedef struct
        const char *overlay_name;
        const char *post_static_name;
        const char *home_name;
-       struct memmap *default_local_map;       /* default location for auto vars */
-       struct memmap *default_globl_map;       /* default location for globl vars */
+       const char *xidata_name; // initialized xdata
+       const char *xinit_name; // a code copy of xidata
+       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 */
       }
     mem;
@@ -148,13 +166,10 @@ typedef struct
        /** One more than the smallest 
            mul/div operation the processor can do nativley 
            Eg if the processor has an 8 bit mul, nativebelow is 2 */
-       unsigned native_below;
-       /** The mul/div/mod functions will be made to use regparams
-           for sizeof(param) < log2(force_reg)
-           i.e. Use 2 for WORD and BYTE, 0 for none. */
-       int force_reg_param_below;
+       unsigned muldiv;
+        unsigned shift;
       }
-    muldiv;
+    support;
 
 /** Prefix to add to a C function (eg "_") */
     const char *fun_prefix;
@@ -191,6 +206,7 @@ typedef struct
      */
     int (*genIVT) (FILE * of, symbol ** intTable, int intCount);
 
+    void (*genXINIT) (FILE * of);
 
     /* parameter passing in register related functions */
     void (*reset_regparms) (); /* reset the register count */
@@ -201,6 +217,15 @@ typedef struct
     */
     int (*process_pragma) (const char *sz);
 
+    /** Mangles a support function name to reflect the calling model. 
+     */
+    char *(*getMangledFunctionName) (char *szOrginial);
+
+    /** Returns true if the port can multiply the two types nativly
+        without using support functions.
+    */
+    bool (*hasNativeMulFor) (iCode *ic, sym_link *left, sym_link *right);
+
     /** If TRUE, then tprintf and !dw will be used for some initalisers
      */
     bool use_dw_for_init;
@@ -213,6 +238,10 @@ typedef struct
     bool ne_neq;               /* transform a != b --> ! (a == b)  */
     bool eq_nne;               /* transform a == b --> ! (a != b)  */
 
+    bool arrayInitializerSuppported;  
+    
+    bool (*cseOk) (iCode *ic, iCode *pdic);
+    builtins *builtintable;    /* table of builtin functions */
 #define PORT_MAGIC 0xAC32
 /** Used at runtime to detect if this structure has been completly filled in. */
     int magic;