* src/pic/pcode.c (sameBank,FixRegisterBanking): optimize banksels
[fw/sdcc] / src / pic / main.c
index 37a2b40a82bd9f0b80f70d6c15ccb3041cc64765..9b8cd24ccf3f31c1ddf86cdac28921bcc0cff825 100644 (file)
@@ -12,6 +12,7 @@
 #include "SDCCmacro.h"
 #include "MySystem.h"
 #include "glue.h"
+#include "dbuf_string.h"
 #include <errno.h>
 //#include "gen.h"
 
@@ -99,60 +100,6 @@ _pic14_regparm (sym_link * l, bool reentrant)
        return 1;
 }
 
-static int
-_process_pragma(const char *sz)
-{
-       static const char *WHITE = " \t";
-       char    *ptr = strtok((char *)sz, WHITE);
-       
-       if (startsWith (ptr, "memmap"))
-       {
-               char    *start;
-               char    *end;
-               char    *type;
-               char    *alias;
-               
-               start = strtok((char *)NULL, WHITE);
-               end = strtok((char *)NULL, WHITE);
-               type = strtok((char *)NULL, WHITE);
-               alias = strtok((char *)NULL, WHITE);
-               
-               if (start != (char *)NULL
-                       && end != (char *)NULL
-                       && type != (char *)NULL) {
-                       value           *startVal = constVal(start);
-                       value           *endVal = constVal(end);
-                       value           *aliasVal;
-                       memRange        r;
-                       
-                       if (alias == (char *)NULL) {
-                               aliasVal = constVal(0);
-                       } else {
-                               aliasVal = constVal(alias);
-                       }
-                       
-                       r.start_address = (int)floatFromVal(startVal);
-                       r.end_address = (int)floatFromVal(endVal);
-                       r.alias = (int)floatFromVal(aliasVal);
-                       r.bank = (r.start_address >> 7) & 3;
-                       
-                       if (strcmp(type, "RAM") == 0) {
-                               addMemRange(&r, 0);
-                       } else if (strcmp(type, "SFR") == 0) {
-                               addMemRange(&r, 1);
-                       } else {
-                               return 1;
-                       }
-               }
-               
-               return 0;
-       } else if (startsWith (ptr, "maxram")) {
-               // not used any more - comes from device config file pic14devices.txt instead
-               return 0;
-       }
-       return 1;
-}
-
 extern char *udata_section_name;
 
 static bool
@@ -311,7 +258,7 @@ _pic14_genAssemblerPreamble (FILE * of)
 
 /* Generate interrupt vector table. */
 static int
-_pic14_genIVT (FILE * of, symbol ** interrupts, int maxInterrupts)
+_pic14_genIVT (struct dbuf_s * oBuf, symbol ** interrupts, int maxInterrupts)
 {
        int i;
        
@@ -321,18 +268,18 @@ _pic14_genIVT (FILE * of, symbol ** interrupts, int maxInterrupts)
                return FALSE;
        }
        
-       fprintf (of, "\t;ajmp\t__sdcc_gsinit_startup\n");
+       dbuf_printf (oBuf, "\t;ajmp\t__sdcc_gsinit_startup\n");
        
        /* now for the other interrupts */
        for (i = 0; i < maxInterrupts; i++)
        {
                if (interrupts[i])
                {
-                       fprintf (of, "\t;ljmp\t%s\n\t.ds\t4\n", interrupts[i]->rname);
+                       dbuf_printf (oBuf, "\t;ljmp\t%s\n\t.ds\t4\n", interrupts[i]->rname);
                }
                else
                {
-                       fprintf (of, "\t;reti\n\t.ds\t7\n");
+                       dbuf_printf (oBuf, "\t;reti\n\t.ds\t7\n");
                }
        }
        
@@ -566,6 +513,8 @@ PORT pic_port =
                NULL, // xinit
                "CONST   (CODE)",               // const_name - const data (code or not)
                "CABS    (ABS,CODE)",   // cabs_name - const absolute data (code or not)
+               "XABS    (ABS,XDATA)",  // xabs_name - absolute xdata
+               "IABS    (ABS,DATA)",   // iabs_name - absolute data
                NULL,
                NULL,
                1        // code is read only
@@ -608,7 +557,7 @@ PORT pic_port =
        NULL,                           /* genInitStartup */
        _pic14_reset_regparm,
        _pic14_regparm,
-       _process_pragma,                                /* process a pragma */
+       NULL,                           /* process a pragma */
        NULL,
        _hasNativeMulFor,
        hasExtBitOp,                    /* hasExtBitOp */