2004-01-05 Vangelis Rokas <vrokas@otenet.gr>
authorvrokas <vrokas@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Mon, 5 Jan 2004 17:45:04 +0000 (17:45 +0000)
committervrokas <vrokas@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Mon, 5 Jan 2004 17:45:04 +0000 (17:45 +0000)
* support/scripts/inc2h.pl: changed definition of BIT_AT
to emit 'sbit at' instead of 'bit at'. This was a request.

PIC16 port related preliminary changes:
* gen.c: prefixed function popRegFromString with
pic16_ and all references to it corrected
* pcode.c: all pic16_pc_* hardware registers prefixed
with underscore (_),
pic16_popCopyGPR2Bit(): function sets register wasUsed=1
* ralloc.c: newReg(): when register is REG_SFR then
set address to rIdx,
pic16_allocProcessorRegister(): marks register wasUsed=0
pic16_writeUsedRegs(): added a call to assign processor
registers via pic16_assignFixedRegisters

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

ChangeLog
src/pic16/device.c
src/pic16/gen.c
src/pic16/pcode.c
src/pic16/ralloc.c
support/scripts/inc2h.pl

index 0ad486335ddcdb2fa1c269c0257bd310bf8326e9..9c015e3584891ced62cda1f9144d5546b475181e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+2004-01-05 Vangelis Rokas <vrokas@otenet.gr>
+
+       * support/scripts/inc2h.pl: changed definition of BIT_AT
+       to emit 'sbit at' instead of 'bit at'. This was a request.
+
+       PIC16 port related preliminary changes:
+       * gen.c: prefixed function popRegFromString with
+       pic16_ and all references to it corrected
+       * pcode.c: all pic16_pc_* hardware registers prefixed
+       with underscore (_),
+       pic16_popCopyGPR2Bit(): function sets register wasUsed=1
+       * ralloc.c: newReg(): when register is REG_SFR then
+       set address to rIdx,
+       pic16_allocProcessorRegister(): marks register wasUsed=0
+       pic16_writeUsedRegs(): added a call to assign processor
+       registers via pic16_assignFixedRegisters
+
 2004-01-04  Jesus Calvino-Fraga <jesusc@ece.ubc.ca>
 
        * as/mcs51/aslink.h, as/mcs51/lkarea.c, as/mcs51/lkdata.c,
 2004-01-04  Jesus Calvino-Fraga <jesusc@ece.ubc.ca>
 
        * as/mcs51/aslink.h, as/mcs51/lkarea.c, as/mcs51/lkdata.c,
index 23b9e81a780b47475ecaf6e0cafaeef26ba09237..4dea1545d8328e8e718f5c79e456c780c27c4953 100644 (file)
@@ -392,7 +392,8 @@ void pic16_dump_cblock(FILE *of)
 
   do {
 
 
   do {
 
-    if(pic16_finalMapping[addr].reg && !pic16_finalMapping[addr].reg->isEmitted) {
+    if(pic16_finalMapping[addr].reg && !pic16_finalMapping[addr].reg->isEmitted
+       && pic16_finalMapping[addr].reg->wasUsed) {
 
       if(start<0)
        start = addr;
 
       if(start<0)
        start = addr;
index c05870540fa674ba9800181c3c630a09ffe84d7d..174bca23be9111fdbda6990d0dffad7a96d726b6 100644 (file)
@@ -50,7 +50,7 @@ void pic16_genMult8X8_8 (operand *, operand *,operand *);
 pCode *pic16_AssembleLine(char *line);
 extern void pic16_printpBlock(FILE *of, pBlock *pb);
 static asmop *newAsmop (short type);
 pCode *pic16_AssembleLine(char *line);
 extern void pic16_printpBlock(FILE *of, pBlock *pb);
 static asmop *newAsmop (short type);
-static pCodeOp *popRegFromString(char *str, int size, int offset);
+static pCodeOp *pic16_popRegFromString(char *str, int size, int offset);
 static void mov2w (asmop *aop, int offset);
 static int aopIdx (asmop *aop, int offset);
 
 static void mov2w (asmop *aop, int offset);
 static int aopIdx (asmop *aop, int offset);
 
@@ -873,7 +873,7 @@ void pic16_aopOp (operand *op, iCode *ic, bool result)
 
        sym->aop = op->aop = aop = newAsmop(AOP_PCODE);
        //aop->aopu.pcop = pic16_popGetImmd(sym->usl.spillLoc->rname,0,sym->usl.spillLoc->offset);
 
        sym->aop = op->aop = aop = newAsmop(AOP_PCODE);
        //aop->aopu.pcop = pic16_popGetImmd(sym->usl.spillLoc->rname,0,sym->usl.spillLoc->offset);
-       aop->aopu.pcop = popRegFromString(sym->usl.spillLoc->rname, 
+       aop->aopu.pcop = pic16_popRegFromString(sym->usl.spillLoc->rname, 
                                          getSize(sym->type), 
                                          sym->usl.spillLoc->offset);
         aop->size = getSize(sym->type);
                                          getSize(sym->type), 
                                          sym->usl.spillLoc->offset);
         aop->size = getSize(sym->type);
@@ -1264,9 +1264,9 @@ pCodeOp *pic16_popGetWithString(char *str)
 }
 
 /*-----------------------------------------------------------------*/
 }
 
 /*-----------------------------------------------------------------*/
-/* popRegFromString -                                              */
+/* pic16_popRegFromString -                                        */
 /*-----------------------------------------------------------------*/
 /*-----------------------------------------------------------------*/
-static pCodeOp *popRegFromString(char *str, int size, int offset)
+static pCodeOp *pic16_popRegFromString(char *str, int size, int offset)
 {
 
   pCodeOp *pcop = Safe_calloc(1,sizeof(pCodeOpReg) );
 {
 
   pCodeOp *pcop = Safe_calloc(1,sizeof(pCodeOpReg) );
@@ -1370,7 +1370,7 @@ pCodeOp *pic16_popGet (asmop *aop, int offset) //, bool bit16, bool dname)
       return pic16_popGetImmd(aop->aopu.aop_immd,offset,0);
 
     case AOP_DIR:
       return pic16_popGetImmd(aop->aopu.aop_immd,offset,0);
 
     case AOP_DIR:
-      return popRegFromString(aop->aopu.aop_dir, aop->size, offset);
+      return pic16_popRegFromString(aop->aopu.aop_dir, aop->size, offset);
 
 #if 0
        pcop = Safe_calloc(1,sizeof(pCodeOpReg) );
 
 #if 0
        pcop = Safe_calloc(1,sizeof(pCodeOpReg) );
@@ -8684,12 +8684,12 @@ static void genDataPointerSet(operand *right,
            pic16_emitcode("movwf","%s",buffer);
 
            pic16_emitpcode(POC_MOVLW, pic16_popGetLit(lit&0xff));
            pic16_emitcode("movwf","%s",buffer);
 
            pic16_emitpcode(POC_MOVLW, pic16_popGetLit(lit&0xff));
-           //pic16_emitpcode(POC_MOVWF, popRegFromString(buffer));
+           //pic16_emitpcode(POC_MOVWF, pic16_popRegFromString(buffer));
            pic16_emitpcode(POC_MOVWF, pic16_popGet(AOP(result),0));
 
          } else {
            pic16_emitcode("clrf","%s",buffer);
            pic16_emitpcode(POC_MOVWF, pic16_popGet(AOP(result),0));
 
          } else {
            pic16_emitcode("clrf","%s",buffer);
-           //pic16_emitpcode(POC_CLRF, popRegFromString(buffer));
+           //pic16_emitpcode(POC_CLRF, pic16_popRegFromString(buffer));
            pic16_emitpcode(POC_CLRF, pic16_popGet(AOP(result),0));
          }
        }else {
            pic16_emitpcode(POC_CLRF, pic16_popGet(AOP(result),0));
          }
        }else {
@@ -8697,7 +8697,7 @@ static void genDataPointerSet(operand *right,
          pic16_emitcode("movwf","%s",buffer);
 
          pic16_emitpcode(POC_MOVFW, pic16_popGet(AOP(right),offset));
          pic16_emitcode("movwf","%s",buffer);
 
          pic16_emitpcode(POC_MOVFW, pic16_popGet(AOP(right),offset));
-         //pic16_emitpcode(POC_MOVWF, popRegFromString(buffer));
+         //pic16_emitpcode(POC_MOVWF, pic16_popRegFromString(buffer));
          pic16_emitpcode(POC_MOVWF, pic16_popGet(AOP(result),0));
 
        }
          pic16_emitpcode(POC_MOVWF, pic16_popGet(AOP(result),0));
 
        }
index 3ed977734e1b37d23ad5d55ad4c66783317b0b88..9c6e07f1b542efbcca0bc7cb0fbbd1837b012ccb 100644 (file)
@@ -53,13 +53,13 @@ static peepCommand peepCommands[] = {
 
 // Eventually this will go into device dependent files:
 pCodeOpReg pic16_pc_status    = {{PO_STATUS,  "_STATUS"}, -1, NULL,0,NULL};
 
 // Eventually this will go into device dependent files:
 pCodeOpReg pic16_pc_status    = {{PO_STATUS,  "_STATUS"}, -1, NULL,0,NULL};
-pCodeOpReg pic16_pc_indf0     = {{PO_INDF0,   "INDF0"}, -1, NULL,0,NULL};
-pCodeOpReg pic16_pc_fsr0      = {{PO_FSR0,    "FSR0"}, -1, NULL,0,NULL};
+pCodeOpReg pic16_pc_indf0     = {{PO_INDF0,   "_INDF0"}, -1, NULL,0,NULL};
+pCodeOpReg pic16_pc_fsr0      = {{PO_FSR0,    "_FSR0"}, -1, NULL,0,NULL};
 pCodeOpReg pic16_pc_intcon    = {{PO_INTCON,  ""}, -1, NULL,0,NULL};
 pCodeOpReg pic16_pc_intcon    = {{PO_INTCON,  ""}, -1, NULL,0,NULL};
-pCodeOpReg pic16_pc_pcl       = {{PO_PCL,     "PCL"}, -1, NULL,0,NULL};
+pCodeOpReg pic16_pc_pcl       = {{PO_PCL,     "_PCL"}, -1, NULL,0,NULL};
 pCodeOpReg pic16_pc_pclath    = {{PO_PCLATH,  "_PCLATH"}, -1, NULL,0,NULL};
 pCodeOpReg pic16_pc_pclath    = {{PO_PCLATH,  "_PCLATH"}, -1, NULL,0,NULL};
-pCodeOpReg pic16_pc_wreg      = {{PO_WREG,    "WREG"}, -1, NULL,0,NULL};
-pCodeOpReg pic16_pc_bsr       = {{PO_BSR,     "BSR"}, -1, NULL,0,NULL};
+pCodeOpReg pic16_pc_wreg      = {{PO_WREG,    "_WREG"}, -1, NULL,0,NULL};
+pCodeOpReg pic16_pc_bsr       = {{PO_BSR,     "_BSR"}, -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_kzero     = {{PO_GPR_REGISTER,  "KZ"}, -1, NULL,0,NULL};
 pCodeOpReg pic16_pc_wsave     = {{PO_GPR_REGISTER,  "WSAVE"}, -1, NULL,0,NULL};
@@ -5899,7 +5899,7 @@ pCodeOp *pic16_popCopyGPR2Bit(pCodeOp *pc, int bitval)
         (pcop->type == PO_LITERAL) ||
         (pcop->type == PO_STR) ))
     PCOR(pcop)->r = PCOR(pc)->r;  /* This is dangerous... */
         (pcop->type == PO_LITERAL) ||
         (pcop->type == PO_STR) ))
     PCOR(pcop)->r = PCOR(pc)->r;  /* This is dangerous... */
-
+    PCOR(pcop)->r->wasUsed = 1;                // mark register as used
   return pcop;
 }
 
   return pcop;
 }
 
@@ -6291,9 +6291,9 @@ void pic16_AnalyzeBanking(void)
 
   for(pb = the_pFile->pbHead; pb; pb = pb->next)
     pic16_FixRegisterBanking(pb);
 
   for(pb = the_pFile->pbHead; pb; pb = pb->next)
     pic16_FixRegisterBanking(pb);
-
 }
 
 }
 
+
 /*-----------------------------------------------------------------*/
 /* buildCallTree - Look at the flow and extract all of the calls.  */
 /*-----------------------------------------------------------------*/
 /*-----------------------------------------------------------------*/
 /* buildCallTree - Look at the flow and extract all of the calls.  */
 /*-----------------------------------------------------------------*/
index 726bb68dd58515d9b14bbaae33e0e2c4343b29db..1c883364bc45778518dc7466d540785117315096 100644 (file)
@@ -456,14 +456,16 @@ static regs* newReg(short type, short pc_type, int rIdx, char *name, int size, i
   //fprintf(stderr,"newReg: %s, rIdx = 0x%02x\n",dReg->name,rIdx);
   dReg->isFree = 0;
   dReg->wasUsed = 1;
   //fprintf(stderr,"newReg: %s, rIdx = 0x%02x\n",dReg->name,rIdx);
   dReg->isFree = 0;
   dReg->wasUsed = 1;
-  if(type == REG_SFR)
+  if(type == REG_SFR) {
     dReg->isFixed = 1;
     dReg->isFixed = 1;
-  else
+    dReg->address = rIdx;
+  } else {
     dReg->isFixed = 0;
     dReg->isFixed = 0;
+    dReg->address = 0;
+  }
 
   dReg->isMapped = 0;
   dReg->isEmitted = 0;
 
   dReg->isMapped = 0;
   dReg->isEmitted = 0;
-  dReg->address = 0;
   dReg->size = size;
   dReg->alias = alias;
   dReg->reg_alias = NULL;
   dReg->size = size;
   dReg->alias = alias;
   dReg->reg_alias = NULL;
@@ -531,9 +533,12 @@ void pic16_initStack(int base_address, int size)
 regs *
 pic16_allocProcessorRegister(int rIdx, char * name, short po_type, int alias)
 {
 regs *
 pic16_allocProcessorRegister(int rIdx, char * name, short po_type, int alias)
 {
+  regs * reg = newReg(REG_SFR, po_type, rIdx, name, 1, alias);
 
 
+       if(reg)reg->wasUsed = 0;
+       
   //fprintf(stderr,"pic16_allocProcessorRegister %s addr =0x%x\n",name,rIdx);
   //fprintf(stderr,"pic16_allocProcessorRegister %s addr =0x%x\n",name,rIdx);
-  return addSet(&pic16_dynProcessorRegs,newReg(REG_SFR, po_type, rIdx, name,1,alias));
+  return addSet(&pic16_dynProcessorRegs, reg);
 }
 
 /*-----------------------------------------------------------------*
 }
 
 /*-----------------------------------------------------------------*
@@ -1086,6 +1091,7 @@ void pic16_writeUsedRegs(FILE *of)
   pic16_assignFixedRegisters(pic16_dynAllocRegs);
   pic16_assignFixedRegisters(pic16_dynStackRegs);
   pic16_assignFixedRegisters(pic16_dynDirectRegs);
   pic16_assignFixedRegisters(pic16_dynAllocRegs);
   pic16_assignFixedRegisters(pic16_dynStackRegs);
   pic16_assignFixedRegisters(pic16_dynDirectRegs);
+  pic16_assignFixedRegisters(pic16_dynProcessorRegs);
 
   pic16_assignRelocatableRegisters(pic16_dynInternalRegs,0);
   pic16_assignRelocatableRegisters(pic16_dynAllocRegs,0);
 
   pic16_assignRelocatableRegisters(pic16_dynInternalRegs,0);
   pic16_assignRelocatableRegisters(pic16_dynAllocRegs,0);
index c66532b2a8764191a0173f96cd57660a6e8fcf0b..63b693cb0ef0d85ae29250d4f36f33580635b623 100755 (executable)
@@ -275,7 +275,7 @@ $header .= <<EOT;
 #define P${processor}_H
 
 #ifndef BIT_AT
 #define P${processor}_H
 
 #ifndef BIT_AT
-#define BIT_AT(base,bitno) bit at ((base<<3)+bitno)
+#define BIT_AT(base,bitno) sbit at ((base<<3)+bitno)
 #endif
 
 //
 #endif
 
 //