From 487fdab5c8b8e767c319a7c6556a891a51a69309 Mon Sep 17 00:00:00 2001 From: tecodev Date: Tue, 11 Apr 2006 20:12:07 +0000 Subject: [PATCH] * src/pic16/gen.c (getFreePtr, pic16_popRegFromString), * 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 | 6 ++++++ src/pic16/gen.c | 6 +++--- src/pic16/pcode.c | 34 ++++++++++++++++++++++++++++++---- src/pic16/ralloc.c | 2 +- 4 files changed, 40 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 426c9394..26dde108 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2006-04-11 Raphael Neider + + * 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 * device/lib/pic/libdev/*.c, diff --git a/src/pic16/gen.c b/src/pic16/gen.c index d2c7f036..362cda21 100644 --- a/src/pic16/gen.c +++ b/src/pic16/gen.c @@ -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; diff --git a/src/pic16/pcode.c b/src/pic16/pcode.c index e20eb832..0590f9ce 100644 --- a/src/pic16/pcode.c +++ b/src/pic16/pcode.c @@ -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)); diff --git a/src/pic16/ralloc.c b/src/pic16/ralloc.c index 83761a20..f6c31e9a 100644 --- a/src/pic16/ralloc.c +++ b/src/pic16/ralloc.c @@ -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); -- 2.47.2