* src/pic16/pcode.[ch]: introduced pic16_stackpnt_*,
authorvrokas <vrokas@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Wed, 12 Jan 2005 14:26:24 +0000 (14:26 +0000)
committervrokas <vrokas@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Wed, 12 Jan 2005 14:26:24 +0000 (14:26 +0000)
pic16_framepnt_*, pic16_stack_*, pic1_frame_* pointer variables to
access stack and frame pointers. They are initially assigned to
point at pic16_pc_fsr1[lh] and pic16_pc_fsr2[lh] variables and other
accessing SFRs. Updated all occurences of modification of stack or
frame pointer in gen.c and pcode.c,
* src/pic16/ralloc.c (serialRegAssign): fixed two bugs with
assigning of a literal value to pointers,
* src/pic16/main.c (pic16_finiliseOptions): set pre-processor define
flag STACK_MODEL_SMALL or STACK_MODEL_LARGE according to the model
selected

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

ChangeLog
src/pic16/gen.c
src/pic16/glue.c
src/pic16/main.c
src/pic16/pcode.c
src/pic16/pcode.h
src/pic16/ralloc.c

index 67364bd19de13e015fbf239433ca8d78fbacff81..f1be8d9f8b25bb2f59120ececa295d97bbf6f5d5 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2005-01-12 Vangelis Rokas <vrokas AT otenet.gr>
+
+       * src/pic16/pcode.[ch]: introduced pic16_stackpnt_*,
+       pic16_framepnt_*, pic16_stack_*, pic1_frame_* pointer variables to
+       access stack and frame pointers. They are initially assigned to
+       point at pic16_pc_fsr1[lh] and pic16_pc_fsr2[lh] variables and other
+       accessing SFRs. Updated all occurences of modification of stack or
+       frame pointer in gen.c and pcode.c,
+       * src/pic16/ralloc.c (serialRegAssign): fixed two bugs with
+       assigning of a literal value to pointers,
+       * src/pic16/main.c (pic16_finiliseOptions): set pre-processor define
+       flag STACK_MODEL_SMALL or STACK_MODEL_LARGE according to the model
+       selected
+
 2005-01-11 Vangelis Rokas <vrokas AT otenet.gr>
 
        * doc/sdccman.lyx: update documentation about stack pragma, added
index c0ba6354cb0ad9b23d73e305e4b64e1137def97d..bc7aed3efeed171bc697901fffdcaa6df83cbcd1 100644 (file)
@@ -704,7 +704,7 @@ static asmop *aopForSym (iCode *ic, operand *op, bool result)
            } // if
            pic16_emitpcode(POC_MOVLW, pic16_popGetLit(soffs + i /*+ _G.stack_lat*/));
            pic16_emitpcode(POC_MOVFF, pic16_popGet2p(
-                           pic16_popCopyReg(&pic16_pc_plusw2), pcop[i]));
+                           pic16_popCopyReg( pic16_frame_plusw ), pcop[i]));
          }
        }
        
@@ -1335,7 +1335,7 @@ void pic16_freeAsmop (operand *op, asmop *aaop, iCode *ic, bool pop)
                  /* initialise for stack access via frame pointer */
                  pic16_emitpcode(POC_MOVLW, pic16_popGetLit(soffs + i /*+ _G.stack_lat*/));
                  pic16_emitpcode(POC_MOVFF, pic16_popGet2p(
-                        aop->aopu.stk.pop[i], pic16_popCopyReg(&pic16_pc_plusw2)));
+                        aop->aopu.stk.pop[i], pic16_popCopyReg(pic16_frame_plusw)));
                }
        
                 if(_G.accInUse)pic16_poppCodeOp( pic16_popCopyReg(&pic16_pc_wreg) );
@@ -2304,7 +2304,7 @@ void pic16_testStackOverflow(void)
 void pic16_pushpCodeOp(pCodeOp *pcop)
 {
 //     DEBUGpic16_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-  pic16_emitpcode(POC_MOVFF, pic16_popGet2p(pcop, pic16_popCopyReg(&pic16_pc_postdec1)));
+  pic16_emitpcode(POC_MOVFF, pic16_popGet2p(pcop, pic16_popCopyReg( pic16_stack_postdec )));   //&pic16_pc_postdec1)));
   if(pic16_options.gstack)
     pic16_testStackOverflow();
     
@@ -2313,7 +2313,7 @@ void pic16_pushpCodeOp(pCodeOp *pcop)
 /* pop pcop from stack */
 void pic16_poppCodeOp(pCodeOp *pcop)
 {
-  pic16_emitpcode(POC_MOVFF, pic16_popGet2p(pic16_popCopyReg(&pic16_pc_preinc1), pcop));
+  pic16_emitpcode(POC_MOVFF, pic16_popGet2p(pic16_popCopyReg( pic16_stack_preinc ), pcop));
   if(pic16_options.gstack)
     pic16_testStackOverflow();
 }
@@ -2325,7 +2325,7 @@ void pic16_poppCodeOp(pCodeOp *pcop)
 void pushw(void)
 {
   DEBUGpic16_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-  pic16_emitpcode(POC_MOVWF, pic16_popCopyReg(&pic16_pc_postdec1));
+  pic16_emitpcode(POC_MOVWF, pic16_popCopyReg( pic16_stack_postdec )); //&pic16_pc_postdec1));
   if(pic16_options.gstack)
     pic16_testStackOverflow();
 }
@@ -2340,13 +2340,12 @@ void pushaop(asmop *aop, int offset)
 
   if(is_LitAOp(aop)) {
     pic16_emitpcode(POC_MOVLW, pic16_popGet(aop, offset));
-    pic16_emitpcode(POC_MOVWF, pic16_popCopyReg(&pic16_pc_postdec1));
+    pic16_emitpcode(POC_MOVWF, pic16_popCopyReg( pic16_stack_postdec ));       //&pic16_pc_postdec1));
   } else {
     pic16_emitpcode(POC_MOVFF,
-      pic16_popGet2p(pic16_popGet(aop, offset), pic16_popCopyReg(&pic16_pc_postdec1)));
+      pic16_popGet2p(pic16_popGet(aop, offset), pic16_popCopyReg( pic16_stack_postdec )));     //&pic16_pc_postdec1)));
   }
 
-//  pic16_emitpcode(POC_MOVFF, pic16_popCombine2(PCOR(pic16_popGet(aop, offset)), &pic16_pc_postdec1, 0));
   if(pic16_options.gstack)
     pic16_testStackOverflow();
 }
@@ -2357,7 +2356,7 @@ void pushaop(asmop *aop, int offset)
 void popaop(asmop *aop, int offset)
 {
   DEBUGpic16_emitcode("; ***", "%s  %d", __FUNCTION__, __LINE__);
-  pic16_emitpcode(POC_MOVFF, pic16_popCombine2(&pic16_pc_preinc1, PCOR(pic16_popGet(aop, offset)), 0));
+  pic16_emitpcode(POC_MOVFF, pic16_popCombine2(pic16_stack_preinc, PCOR(pic16_popGet(aop, offset)), 0));
   if(pic16_options.gstack)
     pic16_testStackOverflow();
 }
@@ -2371,7 +2370,7 @@ void popaopidx(asmop *aop, int offset, int index)
     if(STACK_MODEL_LARGE)ofs++;
 
     pic16_emitpcode(POC_MOVLW, pic16_popGetLit(index + ofs));
-    pic16_emitpcode(POC_MOVFF, pic16_popCombine2(&pic16_pc_plusw2, PCOR(pic16_popGet(aop, offset)), 0));
+    pic16_emitpcode(POC_MOVFF, pic16_popCombine2(pic16_frame_plusw, PCOR(pic16_popGet(aop, offset)), 0));
     if(pic16_options.gstack)
       pic16_testStackOverflow();
 }
@@ -2925,10 +2924,10 @@ static void assignResultValue(operand * oper, int rescall)
                        
        /* fix stack */
        pic16_emitpcode(POC_MOVLW, pic16_popGetLit( AOP_SIZE(oper) ));
-       pic16_emitpcode(POC_ADDWF, pic16_popCopyReg( &pic16_pc_fsr1l ));
+       pic16_emitpcode(POC_ADDWF, pic16_popCopyReg( pic16_stackpnt_lo ));      //&pic16_pc_fsr1l ));
        if(STACK_MODEL_LARGE) {
          emitSKPNC;
-         pic16_emitpcode(POC_INCF, pic16_popCopyReg( &pic16_pc_fsr1h ));
+         pic16_emitpcode(POC_INCF, pic16_popCopyReg( pic16_stackpnt_hi ));     //&pic16_pc_fsr1h ));
        }
       }                        
     } else {
@@ -3293,14 +3292,14 @@ static void genCall (iCode *ic)
     
     if(stackParms>0) {
       if(stackParms == 1) {
-        pic16_emitpcode(POC_INCF, pic16_popCopyReg(&pic16_pc_fsr1l));
+        pic16_emitpcode(POC_INCF, pic16_popCopyReg(pic16_stackpnt_lo ));       //&pic16_pc_fsr1l));
       } else {
         pic16_emitpcode(POC_MOVLW, pic16_popGetLit(stackParms));
-        pic16_emitpcode(POC_ADDWF, pic16_popCopyReg( &pic16_pc_fsr1l ));
+        pic16_emitpcode(POC_ADDWF, pic16_popCopyReg( pic16_stackpnt_lo ));     //&pic16_pc_fsr1l ));
       }
       if(STACK_MODEL_LARGE) {
         emitSKPNC;
-        pic16_emitpcode(POC_INCF, pic16_popCopyReg( &pic16_pc_fsr1h ));
+        pic16_emitpcode(POC_INCF, pic16_popCopyReg( pic16_stackpnt_hi ));      //&pic16_pc_fsr1h ));
       }
     }
 
@@ -3427,11 +3426,10 @@ static void genPcall (iCode *ic)
     
     if(stackParms>0) {
       pic16_emitpcode(POC_MOVLW, pic16_popGetLit(stackParms));
-      pic16_emitpcode(POC_ADDWF, pic16_popCopyReg( &pic16_pc_fsr1l ));
+      pic16_emitpcode(POC_ADDWF, pic16_popCopyReg( pic16_stackpnt_lo ));
       if(STACK_MODEL_LARGE) {
-        /* this implies that stackParms < 256 !!! -- VR */
         emitSKPNC;
-        pic16_emitpcode(POC_INCF, pic16_popCopyReg( &pic16_pc_fsr1h ));
+        pic16_emitpcode(POC_INCF, pic16_popCopyReg( pic16_stackpnt_hi ));
       }
     }
 }
@@ -3628,12 +3626,12 @@ static void genFunction (iCode *ic)
       if(1  /*!options.ommitFramePtr || sym->regsUsed*/) {
         /* setup the stack frame */
         if(STACK_MODEL_LARGE)
-          pic16_pushpCodeOp(pic16_popCopyReg(&pic16_pc_fsr2h));
-        pic16_pushpCodeOp(pic16_popCopyReg(&pic16_pc_fsr2l));
-//        pic16_emitpcode(POC_MOVFF, pic16_popCombine2( &pic16_pc_fsr2l, &pic16_pc_postdec1, 0));
-        pic16_emitpcode(POC_MOVFF, pic16_popCombine2( &pic16_pc_fsr1l, &pic16_pc_fsr2l, 0));
+          pic16_pushpCodeOp(pic16_popCopyReg(pic16_framepnt_hi));
+        pic16_pushpCodeOp(pic16_popCopyReg(pic16_framepnt_lo));
+
+        pic16_emitpcode(POC_MOVFF, pic16_popCombine2( pic16_stackpnt_lo, pic16_framepnt_lo, 0));
         if(STACK_MODEL_LARGE)
-          pic16_emitpcode(POC_MOVFF, pic16_popCombine2( &pic16_pc_fsr1h, &pic16_pc_fsr2h, 0));
+          pic16_emitpcode(POC_MOVFF, pic16_popCombine2( pic16_stackpnt_hi, pic16_framepnt_hi, 0));
       }
     }
 
@@ -3643,9 +3641,9 @@ static void genFunction (iCode *ic)
       if (sym->stack > 127)werror(W_STACK_OVERFLOW, sym->name);
 
       pic16_emitpcode(POC_MOVLW, pic16_popGetLit(sym->stack));
-      pic16_emitpcode(POC_SUBWF, pic16_popCopyReg(&pic16_pc_fsr1l));
+      pic16_emitpcode(POC_SUBWF, pic16_popCopyReg( pic16_stackpnt_lo ));       //&pic16_pc_fsr1l));
       emitSKPC;
-      pic16_emitpcode(POC_DECF, pic16_popCopyReg(&pic16_pc_fsr1h));
+      pic16_emitpcode(POC_DECF, pic16_popCopyReg( pic16_stackpnt_hi ));                //&pic16_pc_fsr1h));
     }
           
     if(inWparamList(sym->name)) {
@@ -3733,17 +3731,17 @@ static void genEndFunction (iCode *ic)
     if ((IFFUNC_ISREENT(sym->type) || options.stackAuto)
           && sym->stack) {
       if (sym->stack == 1) {
-        pic16_emitpcode(POC_INFSNZ, pic16_popCopyReg(&pic16_pc_fsr1l));
-        pic16_emitpcode(POC_INCF, pic16_popCopyReg(&pic16_pc_fsr1h));
+        pic16_emitpcode(POC_INFSNZ, pic16_popCopyReg( pic16_stackpnt_lo ));
+        pic16_emitpcode(POC_INCF, pic16_popCopyReg( pic16_stackpnt_hi ));
       } else {
         // we have to add more than one...
-        pic16_emitpcode(POC_MOVWF, pic16_popCopyReg(&pic16_pc_postinc1)); // this holds a return value!
+        pic16_emitpcode(POC_MOVWF, pic16_popCopyReg( pic16_stack_postinc ));   // this holds a return value!
         pic16_emitpcode(POC_MOVLW, pic16_popGetLit(sym->stack-1));
-        pic16_emitpcode(POC_ADDWF, pic16_popCopyReg(&pic16_pc_fsr1l));
+        pic16_emitpcode(POC_ADDWF, pic16_popCopyReg( pic16_stackpnt_lo ));
         emitSKPNC;
-        pic16_emitpcode(POC_INCF, pic16_popCopyReg(&pic16_pc_fsr1h));
+        pic16_emitpcode(POC_INCF, pic16_popCopyReg( pic16_stackpnt_hi ));
         pic16_emitpcode(POC_COMF,  pic16_popCopyReg(&pic16_pc_wreg)); // WREG = -(WREG+1)!
-        pic16_emitpcode(POC_MOVFW, pic16_popCopyReg(&pic16_pc_plusw1)); // this holds a retrun value!
+        pic16_emitpcode(POC_MOVFW, pic16_popCopyReg(pic16_stack_plusw)); // this holds a retrun value!
       }
     }
 
@@ -3751,10 +3749,8 @@ static void genEndFunction (iCode *ic)
       if(1/*!options.ommitFramePtr ||*/ /*sym->regsUsed*/) {
         /* restore stack frame */
         if(STACK_MODEL_LARGE)
-          pic16_poppCodeOp( pic16_popCopyReg( &pic16_pc_fsr2h ));
-//          pic16_emitpcode(POC_MOVFF, pic16_popCombine2( &pic16_pc_preinc1, &pic16_pc_fsr2h, 0));
-        pic16_poppCodeOp( pic16_popCopyReg( &pic16_pc_fsr2l ));
-//        pic16_emitpcode(POC_MOVFF, pic16_popCombine2( &pic16_pc_preinc1, &pic16_pc_fsr2l, 0));
+          pic16_poppCodeOp( pic16_popCopyReg( pic16_framepnt_hi ));
+        pic16_poppCodeOp( pic16_popCopyReg( pic16_framepnt_lo ));
       }
     }
 
@@ -3889,13 +3885,13 @@ static void genRet (iCode *ic)
                        
                /* setup FSR0 */
                pic16_emitpcode(POC_MOVFF, pic16_popGet2p(
-                       pic16_popCopyReg(&pic16_pc_fsr1l), pic16_popCopyReg(&pic16_pc_fsr0l)));
+                       pic16_popCopyReg( pic16_stackpnt_lo ), pic16_popCopyReg(&pic16_pc_fsr0l)));
 
                if(STACK_MODEL_LARGE) {
                        pic16_emitpcode(POC_MOVFF, pic16_popGet2p(
-                               pic16_popCopyReg(&pic16_pc_fsr1h), pic16_popCopyReg(&pic16_pc_fsr0h)));
+                               pic16_popCopyReg( pic16_stackpnt_hi ), pic16_popCopyReg(&pic16_pc_fsr0h)));
                } else {
-                       pic16_emitpcode(POC_CLRF, pic16_popCopyReg( &pic16_pc_fsr1h ) );
+                       pic16_emitpcode(POC_CLRF, pic16_popCopyReg( pic16_stackpnt_hi ));
                }
        }
                                
@@ -12486,10 +12482,10 @@ static void genAddrOf (iCode *ic)
        } // if
        DEBUGpic16_emitcode("*!*", "accessing stack symbol at offset=%d", soffs);
        pic16_emitpcode(POC_MOVLW , pic16_popGetLit( soffs & 0x00FF ));
-       pic16_emitpcode(POC_ADDFW , pic16_popCopyReg(&pic16_pc_fsr2l));
+       pic16_emitpcode(POC_ADDFW , pic16_popCopyReg(pic16_framepnt_lo));
        pic16_emitpcode(POC_MOVWF , pic16_popGet(AOP(result), 0));
        pic16_emitpcode(POC_MOVLW , pic16_popGetLit( (soffs >> 8) & 0x00FF ));
-       pic16_emitpcode(POC_ADDFWC, pic16_popCopyReg(&pic16_pc_fsr2h));
+       pic16_emitpcode(POC_ADDFWC, pic16_popCopyReg(pic16_framepnt_hi));
        pic16_emitpcode(POC_MOVWF , pic16_popGet(AOP(result), 1));
       }
 
index 573f83c5069c235a8604502cc9435d6ae5dd6f2b..7109fd1876604b0ad357498a06681c5e54eb5d33 100644 (file)
@@ -175,15 +175,9 @@ pic16emitRegularMap (memmap * map, bool addPublics, bool arFlag)
                  
                        checkAddSym(&publics, sym);
                } else
-#if 1
                         /* new version */
                        if(IS_STATIC(sym->etype)
                                && !sym->ival) /* && !sym->level*/ {
-#else
-                        /* old version */
-                        if(IS_STATIC(sym->etype)
-                                && !(sym->ival && !sym->level)) {
-#endif
                          regs *reg;
                           sectSym *ssym;
                           int found=0;
@@ -205,9 +199,11 @@ pic16emitRegularMap (memmap * map, bool addPublics, bool arFlag)
 
                                   if(!found)
                                     checkAddReg(&pic16_rel_udata, reg);
+#if 0
                                   else
-                                    debugf("Coudld not find %s in pic16_rel_udata. Check!\n", reg->name);
+                                    debugf("Did find %s in pic16_rel_udata already. Check!\n", reg->name);
 //                                 checkAddSym(&publics, sym);
+#endif
 
                                 }
                        }
index 430f3425bf3cd675680aeafaad244d5553aae8aa..b3b4d4e79caa78d6f6085ad50ccafe984ea2e2b7 100644 (file)
@@ -253,7 +253,9 @@ _process_pragma(const char *sz)
 
                         nsym = newSymbol(symname, 0);
                         strcpy(nsym->rname, ssym->name);
+#if 0
                        checkAddSym(&publics, nsym);
+#endif
 
                        found = 0;
                        for(snam=setFirstItem(sectNames);snam;snam=setNextItem(sectNames)) {
@@ -270,8 +272,10 @@ _process_pragma(const char *sz)
                        
                        ssym->section = snam;
                                
-//                     fprintf(stderr, "%s:%d placing symbol %s at section %s (%p)\n", __FILE__, __LINE__,
-//                             ssym->name, snam->name, snam);
+#if 1
+                       fprintf(stderr, "%s:%d placing symbol %s at section %s (%p)\n", __FILE__, __LINE__,
+                               ssym->name, snam->name, snam);
+#endif
 
                        symname = strtok((char *)NULL, WHITE);
                }
@@ -590,6 +594,12 @@ _pic16_finaliseOptions (void)
       pic16_options.omit_ivt = 1;
       pic16_options.leave_reset = 0;
     }
+    
+    if(STACK_MODEL_LARGE) {
+      addSet(&preArgvSet, Safe_strdup("-DSTACK_MODEL_LARGE"));
+    } else {
+      addSet(&preArgvSet, Safe_strdup("-DSTACK_MODEL_SMALL"));
+    }
 }
 
 
index f0a6f553cfd511ac72ed908099c2055f6e0d462c..ab167c789f603f5a81cb70f28a9ca754f3ac8e38 100644 (file)
@@ -106,12 +106,24 @@ pCodeOpReg pic16_pc_eecon2        = {{PO_SFR_REGISTER, "EECON2"}, -1, NULL, 0, NULL};
 pCodeOpReg pic16_pc_eedata     = {{PO_SFR_REGISTER, "EEDATA"}, -1, NULL, 0, NULL};
 pCodeOpReg pic16_pc_eeadr      = {{PO_SFR_REGISTER, "EEADR"}, -1, NULL, 0, NULL};
 
-
-
 pCodeOpReg pic16_pc_kzero     = {{PO_GPR_REGISTER,  "KZ"}, -1, NULL,0,NULL};
 pCodeOpReg pic16_pc_wsave     = {{PO_GPR_REGISTER,  "WSAVE"}, -1, NULL,0,NULL};
 pCodeOpReg pic16_pc_ssave     = {{PO_GPR_REGISTER,  "SSAVE"}, -1, NULL,0,NULL};
 
+pCodeOpReg *pic16_stackpnt_lo;
+pCodeOpReg *pic16_stackpnt_hi;
+pCodeOpReg *pic16_stack_postinc;
+pCodeOpReg *pic16_stack_postdec;
+pCodeOpReg *pic16_stack_preinc;
+pCodeOpReg *pic16_stack_plusw;
+
+pCodeOpReg *pic16_framepnt_lo;
+pCodeOpReg *pic16_framepnt_hi;
+pCodeOpReg *pic16_frame_postinc;
+pCodeOpReg *pic16_frame_postdec;
+pCodeOpReg *pic16_frame_preinc;
+pCodeOpReg *pic16_frame_plusw;
+
 pCodeOpReg pic16_pc_gpsimio   = {{PO_GPR_REGISTER, "GPSIMIO"}, -1, NULL, 0, NULL};
 pCodeOpReg pic16_pc_gpsimio2  = {{PO_GPR_REGISTER, "GPSIMIO2"}, -1, NULL, 0, NULL};
 
@@ -2970,6 +2982,20 @@ void  pic16_pCodeInitRegisters(void)
        pic16_pc_fsr2l.r = pic16_allocProcessorRegister(IDX_FSR2L, "FSR2L", PO_FSR0, 0x80);
        pic16_pc_fsr2h.r = pic16_allocProcessorRegister(IDX_FSR2H, "FSR2H", PO_FSR0, 0x80);
 
+       pic16_stackpnt_lo = &pic16_pc_fsr1l;
+       pic16_stackpnt_hi = &pic16_pc_fsr1h;
+       pic16_stack_postdec = &pic16_pc_postdec1;
+       pic16_stack_postinc = &pic16_pc_postinc1;
+       pic16_stack_preinc = &pic16_pc_preinc1;
+       pic16_stack_plusw = &pic16_pc_plusw1;
+       
+       pic16_framepnt_lo = &pic16_pc_fsr2l;
+       pic16_framepnt_hi = &pic16_pc_fsr2h;
+       pic16_frame_postdec = &pic16_pc_postdec2;
+       pic16_frame_postinc = &pic16_pc_postinc2;
+       pic16_frame_preinc = &pic16_pc_preinc2;
+       pic16_frame_plusw = &pic16_pc_plusw2;
+
        pic16_pc_indf0.r = pic16_allocProcessorRegister(IDX_INDF0,"INDF0", PO_INDF0, 0x80);
        pic16_pc_postinc0.r = pic16_allocProcessorRegister(IDX_POSTINC0, "POSTINC0", PO_INDF0, 0x80);
        pic16_pc_postdec0.r = pic16_allocProcessorRegister(IDX_POSTDEC0, "POSTDEC0", PO_INDF0, 0x80);
@@ -7839,7 +7865,7 @@ static void pic16_convertLocalRegs2Support(pCode *pcstart, pCode *pcend, int cou
     pc = pcstart;
 //    if(!entry) {
 //      pic16_pCodeInsertAfter(pc, pct = pic16_newpCode(POC_MOVFF, pic16_popGet2p(
-//              pic16_popCopyReg(&pic16_pc_fsr0l), pic16_popCopyReg(&pic16_pc_fsr2l)))); pc = pct;
+//              pic16_popCopyReg(&pic16_pc_fsr0l), pic16_popCopyReg(pic16_framepnt_lo)))); pc = pct;
 //    }
                
     pic16_pCodeInsertAfter(pc, pct=pic16_newpCode(POC_LFSR, pic16_popGetLit2(0, pic16_popGetWithString(r->name)))); pc = pct;
@@ -7848,7 +7874,7 @@ static void pic16_convertLocalRegs2Support(pCode *pcstart, pCode *pcend, int cou
 
 //    if(!entry) {
 //      pic16_pCodeInsertAfter(pc, pct = pic16_newpCode(POC_MOVFF, pic16_popGet2p(
-//              pic16_popCopyReg(&pic16_pc_fsr2l), pic16_popCopyReg(&pic16_pc_fsr0l)))); pc = pct;
+//              pic16_popCopyReg(pic16_framepnt_lo), pic16_popCopyReg(&pic16_pc_fsr0l)))); pc = pct;
 //    }
 
     
index 43dd89f47367ffdcb6690c7b3b3c5c2dfbe29f1b..73ba1f35ff3242ec32b177dc3c436195789552f7 100644 (file)
@@ -1047,15 +1047,15 @@ extern pCodeOpReg pic16_pc_status;
 extern pCodeOpReg pic16_pc_intcon;
 extern pCodeOpReg pic16_pc_pcl;
 extern pCodeOpReg pic16_pc_pclath;
-extern pCodeOpReg pic16_pc_pclatu; // patch 14
+extern pCodeOpReg pic16_pc_pclatu;
 extern pCodeOpReg pic16_pc_wreg;
-extern pCodeOpReg pic16_pc_tosl; // patch 14
-extern pCodeOpReg pic16_pc_tosh; // patch 14
-extern pCodeOpReg pic16_pc_tosu; // patch 14
-extern pCodeOpReg pic16_pc_tblptrl; // patch 15
-extern pCodeOpReg pic16_pc_tblptrh; //
-extern pCodeOpReg pic16_pc_tblptru; //
-extern pCodeOpReg pic16_pc_tablat;  // patch 15
+extern pCodeOpReg pic16_pc_tosl;
+extern pCodeOpReg pic16_pc_tosh;
+extern pCodeOpReg pic16_pc_tosu;
+extern pCodeOpReg pic16_pc_tblptrl;
+extern pCodeOpReg pic16_pc_tblptrh;
+extern pCodeOpReg pic16_pc_tblptru;
+extern pCodeOpReg pic16_pc_tablat;
 extern pCodeOpReg pic16_pc_bsr;
 extern pCodeOpReg pic16_pc_fsr0;
 extern pCodeOpReg pic16_pc_fsr0l;
@@ -1091,6 +1091,20 @@ extern pCodeOpReg pic16_pc_kzero;
 extern pCodeOpReg pic16_pc_wsave;     /* wsave and ssave are used to save W and the Status */
 extern pCodeOpReg pic16_pc_ssave;     /* registers during an interrupt */
 
+extern pCodeOpReg *pic16_stackpnt_lo;
+extern pCodeOpReg *pic16_stackpnt_hi;
+extern pCodeOpReg *pic16_stack_postinc;
+extern pCodeOpReg *pic16_stack_postdec;
+extern pCodeOpReg *pic16_stack_preinc;
+extern pCodeOpReg *pic16_stack_plusw;
+
+extern pCodeOpReg *pic16_framepnt_lo;
+extern pCodeOpReg *pic16_framepnt_hi;
+extern pCodeOpReg *pic16_frame_postinc;
+extern pCodeOpReg *pic16_frame_postdec;
+extern pCodeOpReg *pic16_frame_preinc;
+extern pCodeOpReg *pic16_frame_plusw;
+
 extern pCodeOpReg pic16_pc_gpsimio;
 extern pCodeOpReg pic16_pc_gpsimio2;
 
index a0523c99e7a658cb4a01245eb6bb759d828bf317..9ed5a88c497da96ea02419103621a0411af3d8a5 100644 (file)
@@ -2342,7 +2342,7 @@ serialRegAssign (eBBlock ** ebbs, int count)
 
              /* if we need ptr regs for the right side
                 then mark it */
-             if (POINTER_GET (ic) && getSize (OP_SYMBOL (IC_LEFT (ic))->type)
+             if (POINTER_GET (ic) && IS_SYMOP( IC_LEFT(ic) ) && getSize (OP_SYMBOL (IC_LEFT (ic))->type)
                  <= (unsigned) PTRSIZE)
                {
                  pic16_ptrRegReq++;
@@ -3943,9 +3943,11 @@ pic16_packRegisters (eBBlock * ebp)
       }
     if (POINTER_GET (ic))
       {
-       OP_SYMBOL (IC_LEFT (ic))->uptr = 1;
-       debugLog ("  marking as a pointer (get) =>");
-       debugAopGet ("  left:", IC_LEFT (ic));
+        if(IS_SYMOP(IC_LEFT(ic))) {
+          OP_SYMBOL (IC_LEFT (ic))->uptr = 1;
+          debugLog ("  marking as a pointer (get) =>");
+          debugAopGet ("  left:", IC_LEFT (ic));
+        }
       }
 
        //debugLog("  %d   %s\n", __LINE__, __FUNCTION__);