* src/pic16/devices.inc,
[fw/sdcc] / src / pic16 / pcode.c
index 84947452baa7e0018c4191d85b649f05e9bebe15..f473a88048734401b3a48c990bc3f16f0e47c529 100644 (file)
 extern char *pic16_aopGet (struct asmop *aop, int offset, bool bit16, bool dname);
 
 #if defined(__BORLANDC__) || defined(_MSC_VER)
-#define STRCASECMP stricmp
 #define inline
-#else
-#define STRCASECMP strcasecmp
 #endif
 
 #define DUMP_DF_GRAPHS 0
@@ -159,7 +156,6 @@ extern void pic16_RemoveUnusedRegisters(void);
 extern void pic16_RegsUnMapLiveRanges(void);
 extern void pic16_BuildFlowTree(pBlock *pb);
 extern void pic16_pCodeRegOptimizeRegUsage(int level);
-extern int pic16_picIsInitialized(void);
 extern void SAFE_snprintf(char **str, size_t *size, const char *format, ...);
 extern int mnem2key(unsigned char const *mnem);
 
@@ -2957,10 +2953,8 @@ void SAFE_snprintf(char **str, size_t *size, const  char  *format, ...)
 #endif
 
 extern set *externs;
-extern  void pic16_initStack(int base_address, int size);
 extern regs *pic16_allocProcessorRegister(int rIdx, char * name, short po_type, int alias);
 extern regs *pic16_allocInternalRegister(int rIdx, char * name, short po_type, int alias);
-extern void pic16_init_pic(char *);
 
 void  pic16_pCodeInitRegisters(void)
 {
@@ -2971,9 +2965,6 @@ void  pic16_pCodeInitRegisters(void)
        
        initialized = 1;
 
-//     pic16_initStack(0xfff, 8);
-       pic16_init_pic(port->processor);
-
        pic16_pc_status.r = pic16_allocProcessorRegister(IDX_STATUS,"STATUS", PO_STATUS, 0x80);
        pic16_pc_pcl.r = pic16_allocProcessorRegister(IDX_PCL,"PCL", PO_PCL, 0x80);
        pic16_pc_pclath.r = pic16_allocProcessorRegister(IDX_PCLATH,"PCLATH", PO_PCLATH, 0x80);
@@ -3805,7 +3796,7 @@ pCodeFlowLink *pic16_newpCodeFlowLink(pCodeFlow *pcflow)
 /* pic16_newpCodeCSource - create a new pCode Source Symbol        */
 /*-----------------------------------------------------------------*/
 
-pCode *pic16_newpCodeCSource(int ln, char *f, char *l)
+pCode *pic16_newpCodeCSource(int ln, const char *f, const char *l)
 {
 
   pCodeCSource *pccs;
@@ -4286,7 +4277,7 @@ pCodeOp *pic16_newpCodeOpReg(int rIdx)
     if(!r) {
        fprintf(stderr, "%s:%d Could not find a free GPR register\n",
                __FUNCTION__, __LINE__);
-       exit(-1);
+       exit(EXIT_FAILURE);
     }
   }
 
@@ -4959,7 +4950,7 @@ char *pic16_pCode2str(char *str, size_t size, pCode *pc)
        if(isPCI(pc) && (PCI(pc)->pci_magic != PCI_MAGIC)) {
                fprintf(stderr, "%s:%d: pCodeInstruction initialization error in instruction %s, magic is %x (defaut: %x)\n",
                        __FILE__, __LINE__, PCI(pc)->mnemonic, PCI(pc)->pci_magic, PCI_MAGIC);
-//             exit(-1);
+//             exit(EXIT_FAILURE);
        }
 #endif
 
@@ -5022,7 +5013,7 @@ char *pic16_pCode2str(char *str, size_t size, pCode *pc)
 
           r = pic16_getRegFromInstruction(pc);
 //              fprintf(stderr, "%s:%d reg = %p\tname= %s, accessBank= %d\n",
-//                      __FUNCTION__, __LINE__, r, (r)?r->name:"<null>", (r)?r->accessBank:-1);
+//                      __FUNCTION__, __LINE__, r, (r)?r->name:"<null>", (r)?isACCESS_BANK(r):-1);
 
           if(PCI(pc)->isAccess) {
            static char *bank_spec[2][2] = {
@@ -5030,7 +5021,7 @@ char *pic16_pCode2str(char *str, size_t size, pCode *pc)
              { ", B", ", BANKED" }/* MPASM (should) use BANKED by default */
            };
             
-           SAFE_snprintf(&s,&size,"%s", bank_spec[(r && !r->accessBank) ? 1 : 0][pic16_mplab_comp ? 1 : 0]);
+           SAFE_snprintf(&s,&size,"%s", bank_spec[(r && !isACCESS_BANK(r)) ? 1 : 0][pic16_mplab_comp ? 1 : 0]);
          }
         }
 //      
@@ -6727,7 +6718,7 @@ static void pBlockRemoveUnusedLabels(pBlock *pb)
 {
   pCode *pc; pCodeLabel *pcl;
 
-  if(!pb)
+  if(!pb || !pb->pcHead)
     return;
 
   for(pc = pb->pcHead; (pc=pic16_findNextInstruction(pc->next)) != NULL; ) {
@@ -8909,7 +8900,7 @@ int invalidatesBSR(pCode *pc)
 pseudoBankNr getBankFromBanksel (pCode *pc)
 {
   char *sym;
-  int data = (int)NULL;
+  int data = 0;
 
   if (!pc) return INVALID_BANK;
   
@@ -10106,6 +10097,8 @@ static defmap_t *pic16_pBlockAddInval (pBlock *pb, symbol_t sym) {
   defmap_t *map;
   pCodeFlow *pcfl;
 
+  assert(pb);
+
   pcfl = PCI(pic16_findNextInstruction (pb->pcHead))->pcflow;
 
   /* find initial value (assigning pc == NULL) */
@@ -11304,6 +11297,8 @@ static void createReachingDefinitions (pBlock *pb) {
   set *todo;
   set *blacklist;
 
+  if (!pb) return;
+
   /* initialize out_vals to unique'fied defmaps per pCodeFlow */
   for (pc = pic16_findNextInstruction (pb->pcHead); pc; pc = pic16_findNextInstruction (pc->next)) {
     if (isPCFL(pc)) {
@@ -11813,6 +11808,8 @@ static void assignValnums (pCode *pc) {
 static void pic16_destructDF (pBlock *pb) {
   pCode *pc, *next;
 
+  if (!pb) return;
+
   /* remove old defmaps */
   pc = pic16_findNextInstruction (pb->pcHead);
   while (pc) {
@@ -11838,6 +11835,8 @@ static void pic16_destructDF (pBlock *pb) {
 static int pic16_pBlockHasAsmdirs (pBlock *pb) {
   pCode *pc;
 
+  if (!pb) return 0;
+
   pc = pic16_findNextInstruction (pb->pcHead);
   while (pc) {
     if (isPCAD(pc)) return 1;
@@ -11925,6 +11924,8 @@ static void pic16_createDF (pBlock *pb) {
   pCode *pc, *next;
   int change=0;
 
+  if (!pb) return;
+
   //fprintf (stderr, "creating DF for pb %p (%s)\n", pb, pic16_pBlockGetFunctionName (pb));
 
   pic16_destructDF (pb);
@@ -12218,6 +12219,8 @@ static void pic16_vcg_dumpedges (pCode *pc, FILE *of) {
 static void pic16_vcg_dump (FILE *of, pBlock *pb) {
   pCode *pc;
 
+  if (!pb) return;
+
   /* check pBlock: do not analyze pBlocks with ASMDIRs (for now...) */
   if (pic16_pBlockHasAsmdirs (pb)) {
     //fprintf (stderr, "%s: pBlock contains ASMDIRs -- data flow analysis not performed!\n", __FUNCTION__);
@@ -12238,6 +12241,8 @@ static void pic16_vcg_dump_default (pBlock *pb) {
   char buf[BUF_SIZE];
   pCode *pc;
 
+  if (!pb) return;
+
   /* get function name */
   pc = pb->pcHead;
   while (pc && !isPCF(pc)) pc = pc->next;