fixed bug #505387
[fw/sdcc] / src / port.h
index 38aee26d50ed4679a60273a219c397032bb4d0e9..7a6220adc80c84bf90afc68e9585bf224d6f198d 100644 (file)
 #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
   {
@@ -69,6 +79,8 @@ typedef struct
        int externGlobal;
        /* assembler file extension */
        const char *file_ext;
+        /** If non-null will be used to execute the assembler. */
+       void (*do_assemble) (const char * const*);      
       }
     assembler;
 
@@ -124,8 +136,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;
@@ -187,6 +201,8 @@ typedef struct
 
     /* Write any port specific assembler output. */
     void (*genAssemblerPreamble) (FILE * of);
+      /* invoked at end assembler file */  
+    void (*genAssemblerEnd) (FILE * of);
 
     /* Write the port specific IVT. If genIVT is NULL or if
      * it returns zero, default (8051) IVT generation code
@@ -194,6 +210,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 */
@@ -226,8 +243,11 @@ typedef struct
     bool eq_nne;               /* transform a == b --> ! (a != b)  */
 
     bool arrayInitializerSuppported;  
-    
     bool (*cseOk) (iCode *ic, iCode *pdic);
+    builtins *builtintable;     /* table of builtin functions */
+    int unqualified_pointer;   /* unqualified pointers type is  */    
+    int reset_labelKey  ;      /* reset Label no 1 at the start of a function */
+    int globals_allowed ;       /* global & static locals not allowed ?  0 ONLY TININative*/
 #define PORT_MAGIC 0xAC32
 /** Used at runtime to detect if this structure has been completly filled in. */
     int magic;
@@ -260,5 +280,11 @@ extern PORT i186_port;
 #if !OPT_DISABLE_TLCS900H
 extern PORT tlcs900h_port;
 #endif
+#if !OPT_DISABLE_TININative
+extern PORT tininative_port;
+#endif
+#if !OPT_DISABLE_XA51
+extern PORT xa51_port;
+#endif
 
 #endif /* PORT_INCLUDE*/