From 43082e9855dafdd47d0dc6649c63e47ad7a842c0 Mon Sep 17 00:00:00 2001 From: vrokas Date: Mon, 5 Jan 2004 17:45:04 +0000 Subject: [PATCH] 2004-01-05 Vangelis Rokas * 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 | 17 +++++++++++++++++ src/pic16/device.c | 3 ++- src/pic16/gen.c | 16 ++++++++-------- src/pic16/pcode.c | 14 +++++++------- src/pic16/ralloc.c | 14 ++++++++++---- support/scripts/inc2h.pl | 2 +- 6 files changed, 45 insertions(+), 21 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0ad48633..9c015e35 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,20 @@ +2004-01-05 Vangelis Rokas + + * 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 * as/mcs51/aslink.h, as/mcs51/lkarea.c, as/mcs51/lkdata.c, diff --git a/src/pic16/device.c b/src/pic16/device.c index 23b9e81a..4dea1545 100644 --- a/src/pic16/device.c +++ b/src/pic16/device.c @@ -392,7 +392,8 @@ void pic16_dump_cblock(FILE *of) 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; diff --git a/src/pic16/gen.c b/src/pic16/gen.c index c0587054..174bca23 100644 --- a/src/pic16/gen.c +++ b/src/pic16/gen.c @@ -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); -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); @@ -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); - 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); @@ -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) ); @@ -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 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) ); @@ -8684,12 +8684,12 @@ static void genDataPointerSet(operand *right, 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_CLRF, popRegFromString(buffer)); + //pic16_emitpcode(POC_CLRF, pic16_popRegFromString(buffer)); 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_emitpcode(POC_MOVWF, popRegFromString(buffer)); + //pic16_emitpcode(POC_MOVWF, pic16_popRegFromString(buffer)); pic16_emitpcode(POC_MOVWF, pic16_popGet(AOP(result),0)); } diff --git a/src/pic16/pcode.c b/src/pic16/pcode.c index 3ed97773..9c6e07f1 100644 --- a/src/pic16/pcode.c +++ b/src/pic16/pcode.c @@ -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}; -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_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_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}; @@ -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... */ - + PCOR(pcop)->r->wasUsed = 1; // mark register as used return pcop; } @@ -6291,9 +6291,9 @@ void pic16_AnalyzeBanking(void) for(pb = the_pFile->pbHead; pb; pb = pb->next) pic16_FixRegisterBanking(pb); - } + /*-----------------------------------------------------------------*/ /* buildCallTree - Look at the flow and extract all of the calls. */ /*-----------------------------------------------------------------*/ diff --git a/src/pic16/ralloc.c b/src/pic16/ralloc.c index 726bb68d..1c883364 100644 --- a/src/pic16/ralloc.c +++ b/src/pic16/ralloc.c @@ -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; - if(type == REG_SFR) + if(type == REG_SFR) { dReg->isFixed = 1; - else + dReg->address = rIdx; + } else { dReg->isFixed = 0; + dReg->address = 0; + } dReg->isMapped = 0; dReg->isEmitted = 0; - dReg->address = 0; 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 * 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); - 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_dynProcessorRegs); pic16_assignRelocatableRegisters(pic16_dynInternalRegs,0); pic16_assignRelocatableRegisters(pic16_dynAllocRegs,0); diff --git a/support/scripts/inc2h.pl b/support/scripts/inc2h.pl index c66532b2..63b693cb 100755 --- a/support/scripts/inc2h.pl +++ b/support/scripts/inc2h.pl @@ -275,7 +275,7 @@ $header .= <