* 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
+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,
- 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;
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);
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);
}
/*-----------------------------------------------------------------*/
}
/*-----------------------------------------------------------------*/
-/* 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) );
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) );
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 {
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));
}
// 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};
(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
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. */
/*-----------------------------------------------------------------*/
//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;
+ dReg->address = rIdx;
+ } else {
dReg->isMapped = 0;
dReg->isEmitted = 0;
dReg->isMapped = 0;
dReg->isEmitted = 0;
dReg->size = size;
dReg->alias = alias;
dReg->reg_alias = NULL;
dReg->size = size;
dReg->alias = alias;
dReg->reg_alias = NULL;
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);
}
/*-----------------------------------------------------------------*
}
/*-----------------------------------------------------------------*
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);
#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)