* src/pic16/gen.c (getFreePtr, pic16_popRegFromString),
authortecodev <tecodev@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Tue, 11 Apr 2006 20:12:07 +0000 (20:12 +0000)
committertecodev <tecodev@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Tue, 11 Apr 2006 20:12:07 +0000 (20:12 +0000)
* src/pic16/ralloc.c (pic16_allocregWithName): removed debug output
* src/pic16/pcode.c (assignValnums): fixed #1460578

git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@4093 4a8a32a2-be11-0410-ad9d-d568d2c75423

ChangeLog
src/pic16/gen.c
src/pic16/pcode.c
src/pic16/ralloc.c

index 426c939401c1b10fc6d6c401727909fa4f5710a7..26dde108184b66ffc617563d96602e381b193b60 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2006-04-11 Raphael Neider <rneider AT web.de>
+
+       * src/pic16/gen.c (getFreePtr, pic16_popRegFromString),
+       * src/pic16/ralloc.c (pic16_allocregWithName): removed debug output
+       * src/pic16/pcode.c (assignValnums): fixed #1460578
+
 2006-04-11 Raphael Neider <rneider AT web.de>
 
        * device/lib/pic/libdev/*.c,
index d2c7f0363d811bc6bd04037e712be068cd1db0eb..362cda2131b3a25a6c68a9eb088e7d7b1632efa9 100644 (file)
@@ -410,7 +410,7 @@ static regs *getFreePtr (iCode *ic, asmop **aopp, bool result)
     bool fsr0iu = FALSE, fsr0ou;
     bool fsr2iu = FALSE, fsr2ou;
     
-    fprintf(stderr, "%s:%d: getting free ptr from ic = %c result: %d\n", __FUNCTION__, __LINE__, ic->op, result);
+    //fprintf(stderr, "%s:%s:%d: getting free ptr from ic = %c result: %d\n", __FILE__,  __FUNCTION__, __LINE__, ic->op, result);
 
     
     fsr2iu = bitVectBitValue(ic->rUsed, IDX_FSR2);
@@ -428,7 +428,7 @@ static regs *getFreePtr (iCode *ic, asmop **aopp, bool result)
        ic->rUsed = bitVectSetBit(ic->rUsed, IDX_FSR0);
        (*aopp)->type = AOP_FSR0;
 
-       fprintf(stderr, "%s:%d returning plain FSR0\n", __FILE__, __LINE__);
+       //fprintf(stderr, "%s:%d returning plain FSR0\n", __FILE__, __LINE__);
        
       return ((*aopp)->aopu.aop_ptr = pic16_regWithIdx(IDX_FSR0));
     }
@@ -1938,7 +1938,7 @@ static pCodeOp *pic16_popRegFromString(char *str, int size, int offset, operand
 //             __FUNCTION__, __LINE__, str, size, offset);
 
     PCOR(pcop)->r = pic16_allocRegByName (pcop->name,size, op);
-    fprintf(stderr, "%s:%d: WARNING: need to allocate new register by name -> %s\n", __FILE__, __LINE__, str);
+    //fprintf(stderr, "%s:%d: WARNING: need to allocate new register by name -> %s\n", __FILE__, __LINE__, str);
 
   }
   PCOR(pcop)->instance = offset;
index e20eb83206fbce78c8fc6da68c39329c5f22ccd4..0590f9ce3394ff695eda50f2e4ca5142de4bc4a9 100644 (file)
@@ -11759,8 +11759,10 @@ static void assignValnums (pCode *pc) {
         pc = newpc;
         break; // do not process instruction as MOVFF...
       }
-    } else if (!isSpecial1 && !isSpecial2 && pic16_regIsLocal (reg1) && pic16_regIsLocal (reg2)) {
-      if (val && oldval && (val->in_val != 0) && (val->in_val == oldval->in_val)) {
+    } else if (!isSpecial1 && !isSpecial2
+               && pic16_regIsLocal (reg1) && pic16_regIsLocal (reg2)
+               && val && oldval && (val->in_val != 0)) {
+      if (val->in_val == oldval->in_val) {
        //fprintf (stderr, "MOVFF: F2 (%s) already set up correctly (%x) at %p\n", strFromSym (sym2), oldval->in_val, pc);
         pic16_safepCodeRemove (pc, "=DF= redundant MOVFF removed");
       } else {
@@ -11786,9 +11788,33 @@ static void assignValnums (pCode *pc) {
              if (copy->sym == SPO_WREG) {
                newpc = pic16_newpCode (POC_MOVWF, pic16_pCodeOpCopy (PCOR2(pci->pcop)->pcop2));
              } else {
+               pCodeOp *pcop = NULL;
+               /* the code below fails if we try to replace
+                *   MOVFF PRODL, r0x03
+                *   MOVFF r0x03, PCLATU
+                * with
+                *   MOVFF PRODL, PCLATU
+                * as copy(PRODL) contains has pc==NULL, by name fails...
+                */
+               if (!copy->pc || !PCI(copy->pc)->pcop) break;
+               
+               if (copy->pc && PCI(copy->pc)->pcop)
+                 pcop = PCI(copy->pc)->pcop;
+#if 0
+               /* This code is broken--see above. */
+               else
+               {
+                 const char *symname = strFromSym(copy->sym);
+                 
+                 assert( symname );
+                 pic16_InsertCommentAfter (pc->prev, "BUG-ME");
+                 pic16_InsertCommentAfter (pc->prev, "=DF= MOVFF: newpCodeOpregFromStr(%s)", (char *)symname);
+                 //pcop = pic16_newpCodeOpRegFromStr((char *)symname);
+               }
+#endif
+               assert( pcop );
                 newpc = pic16_newpCode(POC_MOVFF, pic16_popGet2p(
-//                     /*TODO: change to copy->pc's out symbol*/pic16_pCodeOpCopy (pci->pcop),
-                       pic16_pCodeOpCopy (PCI(copy->pc)->pcop),
+                       pcop,
                        pic16_pCodeOpCopy (PCOR2(pci->pcop)->pcop2)));
              }
              pic16_InsertCommentAfter (pc->prev, "=DF= MOVFF: SRC op %s replaced by %s", strFromSym(sym1), strFromSym(copy->sym));
index 83761a206c0a5b125c3e399f05f2376603a8ddd5..f6c31e9a5ba7519c493f2e887c1496adefa61110 100644 (file)
@@ -663,7 +663,7 @@ pic16_allocregWithName (char *name)
 
   hkey = regname2key(name);
 
-       fprintf(stderr, "%s:%d: name = %s\thash = %d\n", __FUNCTION__, __LINE__, name, hkey);
+  //fprintf(stderr, "%s:%d: name = %s\thash = %d\n", __FUNCTION__, __LINE__, name, hkey);
 
   reg = hTabFirstItemWK(dynAllocRegNames, hkey);