changed * to *.* so to ignore the CVS directory,
* src/pic16/gen.c (pic16_freeAsmop): added code to store result of
stacked variables back in stack,
* (genEndFunction): fixed bug reported by G.M. Gallant with stack
corruption
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@3520
4a8a32a2-be11-0410-ad9d-
d568d2c75423
+2004-10-03 Vangelis Rokas <vrokas AT otenet.gr>
+
+ * device/lib/Makefile.in (target port-specific-objects-pic16):
+ changed * to *.* so to ignore the CVS directory,
+ * src/pic16/gen.c (pic16_freeAsmop): added code to store result of
+ stacked variables back in stack,
+ * (genEndFunction): fixed bug reported by G.M. Gallant with stack
+ corruption
+
2004-10-01 Vangelis Rokas <vrokas AT otenet.gr>
* .version: bumped version number to 2.4.5
port-specific-objects-pic16:
if [ -d $(PORT) ]; then \
$(MAKE) -C $(PORT); \
- cp -f $(PORT)/bin/* $(PORTDIR); \
+ cp -f $(PORT)/bin/*.* $(PORTDIR); \
fi
lib-files:
{
int i;
+ /* we must store the result on stack */
+ if((op == IC_RESULT(ic)) && RESULTONSTA(ic)) {
+ if(_G.accInUse)pic16_pushpCodeOp( pic16_popCopyReg(&pic16_pc_wreg) );
+ for(i=0;i<aop->size;i++) {
+ /* initialise for stack access via frame pointer */
+ pic16_emitpcode(POC_MOVLW, pic16_popGetLit(OP_SYMBOL(IC_RESULT(ic))->stack + i + _G.stack_lat));
+
+ pic16_emitpcode(POC_MOVFF, pic16_popGet2p(
+ aop->aopu.stk.pop[i], pic16_popCopyReg(&pic16_pc_plusw2)));
+ }
+
+ if(_G.accInUse)pic16_poppCodeOp( pic16_popCopyReg(&pic16_pc_wreg) );
+ }
+
for(i=0;i<aop->size;i++)
-#if 1
PCOR(aop->aopu.stk.pop[i] )->r->isFree = 1;
-#else
- pic16_popReleaseTempReg( aop->aopu.stk.pop[i], 0 );
- bitVectUnSetBit(_G.fregsUsed, PCOR(aop->aopu.stk.pop[i])->r->rIdx );
-#endif
}
break;
#if 0
if(strcmp(sym->name, "main")) {
- if(/*!options.ommitFramePtr ||*/ sym->regsUsed) {
+ if(1/*!options.ommitFramePtr ||*/ /*sym->regsUsed*/) {
/* restore stack frame */
if(STACK_MODEL_LARGE)
pic16_emitpcode(POC_MOVFF,
void genpic16Code (iCode *);
-//extern char *fReturnpic16[];
-//extern char *fReturn390[];
extern unsigned pic16_fReturnSizePic;
-//extern char **fReturn;
#define AOP(op) op->aop
#define RESULTONSTACK(x) \
(IC_RESULT(x) && IC_RESULT(x)->aop && \
IC_RESULT(x)->aop->type == AOP_STK )
+#define RESULTONSTA(x) (IC_RESULT(x) && IC_RESULT(x)->aop && IC_RESULT(x)->aop->type == AOP_STA)
+
#define MOVA(x) if (strcmp(x,"a") && strcmp(x,"acc")) pic16_emitcode(";XXX mov","a,%s %s,%d",x,__FILE__,__LINE__);
#define CLRC pic16_emitcode(";XXX clr","c %s,%d",__FILE__,__LINE__);