From: vrokas Date: Wed, 12 Jan 2005 14:26:24 +0000 (+0000) Subject: * src/pic16/pcode.[ch]: introduced pic16_stackpnt_*, X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=55f32f245c8bf8cb691105ba5ac82663448d6cf1;p=fw%2Fsdcc * 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 git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@3633 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- diff --git a/ChangeLog b/ChangeLog index 67364bd1..f1be8d9f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +2005-01-12 Vangelis Rokas + + * 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 * doc/sdccman.lyx: update documentation about stack pragma, added diff --git a/src/pic16/gen.c b/src/pic16/gen.c index c0ba6354..bc7aed3e 100644 --- a/src/pic16/gen.c +++ b/src/pic16/gen.c @@ -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)); } diff --git a/src/pic16/glue.c b/src/pic16/glue.c index 573f83c5..7109fd18 100644 --- a/src/pic16/glue.c +++ b/src/pic16/glue.c @@ -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 } } diff --git a/src/pic16/main.c b/src/pic16/main.c index 430f3425..b3b4d4e7 100644 --- a/src/pic16/main.c +++ b/src/pic16/main.c @@ -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")); + } } diff --git a/src/pic16/pcode.c b/src/pic16/pcode.c index f0a6f553..ab167c78 100644 --- a/src/pic16/pcode.c +++ b/src/pic16/pcode.c @@ -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; // } diff --git a/src/pic16/pcode.h b/src/pic16/pcode.h index 43dd89f4..73ba1f35 100644 --- a/src/pic16/pcode.h +++ b/src/pic16/pcode.h @@ -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; diff --git a/src/pic16/ralloc.c b/src/pic16/ralloc.c index a0523c99..9ed5a88c 100644 --- a/src/pic16/ralloc.c +++ b/src/pic16/ralloc.c @@ -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__);