* as/z80/z80mch.c: fixed bug #1704376: missing as-z80 errors
[fw/sdcc] / src / pic16 / pcode.c
index 4318e1af837491bfe5ff3e550e384cc754308806..1754eeee407c4f154346b9f3ff3c0bf2b222b319 100644 (file)
@@ -6424,6 +6424,7 @@ static void insertBankSwitch(unsigned char position, pCode *pc)
 }
 
 
+#if 0
 /*-----------------------------------------------------------------*/
 /*int compareBankFlow - compare the banking requirements between   */
 /*  flow objects. */
@@ -6474,6 +6475,7 @@ static int compareBankFlow(pCodeFlow *pcflow, pCodeFlowLink *pcflowLink, int toO
   return 1;
 
 }
+#endif
 
 #if 0
 /*-----------------------------------------------------------------*/
@@ -7746,7 +7748,9 @@ void pic16_AnalyzeBanking(void)
 /*-----------------------------------------------------------------*/
 /* buildCallTree - Look at the flow and extract all of the calls.  */
 /*-----------------------------------------------------------------*/
+#if 0
 static set *register_usage(pBlock *pb);
+#endif
 
 static void buildCallTree(void    )
 {
@@ -8131,6 +8135,7 @@ static pCode *findFunction(char *fname)
   return NULL;
 }
 
+#if 0
 static void MarkUsedRegisters(set *regset)
 {
 
@@ -8144,6 +8149,7 @@ static void MarkUsedRegisters(set *regset)
     r2->wasUsed = 1;
   }
 }
+#endif
 
 static void pBlockStats(FILE *of, pBlock *pb)
 {
@@ -8214,6 +8220,7 @@ static void sequencepCode(void)
 }
 #endif
 
+#if 0
 /*-----------------------------------------------------------------*/
 /*-----------------------------------------------------------------*/
 static set *register_usage(pBlock *pb)
@@ -8323,6 +8330,7 @@ static set *register_usage(pBlock *pb)
 
   return registers;
 }
+#endif
 
 /*-----------------------------------------------------------------*/
 /* pct2 - writes the call tree to a file                           */
@@ -8959,7 +8967,7 @@ unsigned int attachBsrInfo2pBlock (pBlock *pb, int mod)
 /* bank so that we can make sure the bytes are laid out sequentially in memory)       */
 /* TODO: Symbols with an abslute address must be handled specially!                   */
 /*------------------------------------------------------------------------------------*/
-int assignToSameBank (int bank0, int bank1, int doAbs)
+int assignToSameBank (int bank0, int bank1, int doAbs, int force)
 {
   int eff0, eff1, dummy;
   pseudoBank *pbank0, *pbank1;
@@ -9011,7 +9019,7 @@ int assignToSameBank (int bank0, int bank1, int doAbs)
 #endif
 
   if (pbank1) {
-    if (pbank0->size + pbank1->size > MAX_COMMON_BANK_SIZE) {
+    if (!force && (pbank0->size + pbank1->size > MAX_COMMON_BANK_SIZE)) {
 #if 0
       fprintf (stderr, "bank #%d: %u, bank #%d: %u --> bank #%d': %u > %u (%s,%s)\n",
                pbank0->bank, pbank0->size, pbank1->bank, pbank1->size,
@@ -9154,7 +9162,7 @@ void pic16_OptimizeBanksel ()
     bankNr = reg->address >> 8;
     node = getOrAddGNode (adj, NULL, bankNr);
     bankNr = (pseudoBankNr) getEffectiveBank (getPseudoBankNrFromOperand(reg->name));
-    assignToSameBank (node->hash, bankNr, 1);
+    assignToSameBank (node->hash, bankNr, 1, 1);
 
     assert (bankNr >= 0);
     pbank = (pseudoBank *) hTabFindByKey (coerce, bankNr % coerce->size, (void *) bankNr, &comparePtr);
@@ -9167,6 +9175,7 @@ void pic16_OptimizeBanksel ()
     } else {
       assert (pbank->bank == (reg->address >> 8));
       pbank->bank = reg->address >> 8; //FIXED_BANK;
+      pbank->size++;
     }
     //fprintf (stderr, "ABS: %s (%d bytes) at %x in bank %u\n", reg->name, reg->size, reg->address, bankNr);
   } // for reg
@@ -9185,10 +9194,11 @@ void pic16_OptimizeBanksel ()
       node1next = node1->next;
       base_symbol1 = getSymbolFromOperand (getSymFromBank (getEffectiveBank (node1->hash)), &len1);
       if (len0 == len1 && len0 > 0 && strncmp (base_symbol0, base_symbol1, len0) == 0) {
+        int res;
         // TODO: check for symbols with absolute addresses -- these might be placed across bank boundaries!
         //fprintf (stderr, "merging %s and %s\n", getSymFromBank (getEffectiveBank(node->hash)), getSymFromBank (getEffectiveBank(node1->hash)));
-        if (assignToSameBank (node->hash, node1->hash, 0)) {
-          fprintf (stderr, "%s(%d) == %s(%d)\n", base_symbol0, len0, base_symbol1, len1);
+        if (0 != (res = assignToSameBank (node->hash, node1->hash, 0, 1))) {
+          fprintf (stderr, "%s(%d) == %s(%d), res=%d\n", base_symbol0, len0, base_symbol1, len1, res);
           assert (0 && "Could not assign a symbol to a bank!");
         }
         mergeGraphNodes (node, node1);
@@ -9247,7 +9257,7 @@ void pic16_OptimizeBanksel ()
       node = getGNode (adj, max->src->data, max->src->hash);
       node1 = getGNode (adj, max->node->data, max->node->hash);
 
-      if (0 == assignToSameBank (max->src->hash, max->node->hash, 0)) {
+      if (0 == assignToSameBank (max->src->hash, max->node->hash, 0, 0)) {
         if (max->src->hash < max->node->hash)
           mergeGraphNodes (node, node1);
         else