}
if(ival) {
- setAstLineno(ival, sym->lineDef);
+ setAstFileLine (ival, sym->fileDef, sym->lineDef);
codeOutBuf = &statsg->oBuf;
GcurMemmap = statsg;
eBBlockFromiCode (iCodeFromAst (ival));
/*-----------------------------------------------------------------*/
/* pic16_initPointer - pointer initialization code massaging */
/*-----------------------------------------------------------------*/
-value *pic16_initPointer (initList * ilist, sym_link *toType)
+static value *
+pic16_initPointer (initList * ilist, sym_link *toType)
{
value *val;
ast *expr;
/*-----------------------------------------------------------------*/
/* printPointerType - generates ival for pointer type */
/*-----------------------------------------------------------------*/
-void _pic16_printPointerType (const char *name, char ptype, void *p)
+static void
+_pic16_printPointerType (const char *name, char ptype, void *p)
{
char buf[256];
- sprintf(buf, "LOW(%s)", name);
- pic16_emitDS(buf, ptype, p);
- sprintf(buf, "HIGH(%s)", name);
- pic16_emitDS(buf, ptype, p);
+ sprintf (buf, "LOW(%s)", name);
+ pic16_emitDS (buf, ptype, p);
+ sprintf (buf, "HIGH(%s)", name);
+ pic16_emitDS (buf, ptype, p);
}
/*-----------------------------------------------------------------*/
/* printPointerType - generates ival for pointer type */
/*-----------------------------------------------------------------*/
-void pic16_printPointerType (const char *name, char ptype, void *p)
+static void
+pic16_printPointerType (const char *name, char ptype, void *p)
{
_pic16_printPointerType (name, ptype, p);
//pic16_flushDB(ptype, p); /* breaks char* const arr[] = {&c, &c, &c}; */
/*-----------------------------------------------------------------*/
/* printGPointerType - generates ival for generic pointer type */
/*-----------------------------------------------------------------*/
-void pic16_printGPointerType (const char *iname, const unsigned int itype,
+static void
+pic16_printGPointerType (const char *iname, const unsigned int itype,
char ptype, void *p)
{
char buf[256];
- _pic16_printPointerType (iname, ptype, p);
+ _pic16_printPointerType (iname, ptype, p);
- switch( itype ) {
+ switch (itype)
+ {
+ case CPOINTER: /* fall through */
+ case FUNCTION: /* fall through */
+ case GPOINTER:
+ /* GPTRs pointing to __data space should be reported as POINTERs */
+ sprintf (buf, "UPPER(%s)", iname);
+ pic16_emitDS (buf, ptype, p);
+ break;
+
+ case POINTER: /* __data space */
+ sprintf (buf, "0x%02x", GPTR_TAG_DATA);
+ pic16_emitDS (buf, ptype, p);
+ break;
+
+ /*
+ * FPOINTER and IPOINTER are not used in pic16 port
case FPOINTER:
- case CPOINTER:
- case GPOINTER:
- case FUNCTION:
- {
- sprintf(buf, "UPPER(%s)", iname);
- pic16_emitDS(buf, ptype, p);
- }; break;
- case POINTER:
case IPOINTER:
- sprintf(buf, "0x80");
- pic16_emitDS(buf, ptype, p);
- break;
- default:
- debugf("itype = %d\n", itype );
- assert( 0 );
+ */
+ default:
+ debugf ("itype = %d\n", itype );
+ assert (0);
}
- //pic16_flushDB(ptype, p); /* might break char* const arr[] = {...}; */
+ if (itype == GPOINTER) {
+ fprintf(stderr, "%s: initialized generic pointer with unknown storage class assumes object in code space\n", __func__);
+ }
+
+ //pic16_flushDB(ptype, p); /* might break char* const arr[] = {...}; */
}
if (!(val = list2val (ilist))) {
// assuming a warning has been thrown
- val=constVal("0");
+ val = constCharVal (0);
}
if (val->type != type) {
/*-----------------------------------------------------------------*/
/* pic16_printIvalBitFields - generate initializer for bitfields */
/*-----------------------------------------------------------------*/
-void pic16_printIvalBitFields(symbol **sym, initList **ilist, char ptype, void *p)
+static void
+pic16_printIvalBitFields(symbol **sym, initList **ilist, char ptype, void *p)
{
value *val ;
symbol *lsym = *sym;
/*-----------------------------------------------------------------*/
/* printIvalStruct - generates initial value for structures */
/*-----------------------------------------------------------------*/
-void pic16_printIvalStruct (symbol * sym, sym_link * type,
+static void
+pic16_printIvalStruct (symbol * sym, sym_link * type,
initList * ilist, char ptype, void *p)
{
symbol *sflds;
/*-----------------------------------------------------------------*/
/* printIvalUnion - generates initial value for unions */
/*-----------------------------------------------------------------*/
-void pic16_printIvalUnion (symbol * sym, sym_link * type,
+static void
+pic16_printIvalUnion (symbol * sym, sym_link * type,
initList * ilist, char ptype, void *p)
{
//symbol *sflds;
/*--------------------------------------------------------------------------*/
/* pic16_printIvalCharPtr - generates initial values for character pointers */
/*--------------------------------------------------------------------------*/
-int pic16_printIvalCharPtr (symbol * sym, sym_link * type, value * val, char ptype, void *p)
+static int
+pic16_printIvalCharPtr (symbol * sym, sym_link * type, value * val, char ptype, void *p)
{
int size = 0;
else if (size == 3)
{
int type;
- if (IS_PTR (val->type)) {
- type = DCL_TYPE (val->type);
- } else {
- type = PTR_TYPE (SPEC_OCLS (val->etype));
- }
+ type = PTR_TYPE (SPEC_OCLS (val->etype));
if (val->sym && val->sym->isstrlit) {
// this is a literal string
- type=CPOINTER;
+ type = CPOINTER;
}
pic16_printGPointerType(val->name, type, ptype, p);
}
/*-----------------------------------------------------------------------*/
/* pic16_printIvalFuncPtr - generate initial value for function pointers */
/*-----------------------------------------------------------------------*/
-void pic16_printIvalFuncPtr (sym_link * type, initList * ilist, char ptype, void *p)
+static void
+pic16_printIvalFuncPtr (sym_link * type, initList * ilist, char ptype, void *p)
{
value *val;
int dLvl = 0;
if (!val) {
// an error has been thrown already
- val=constVal("0");
+ val = constCharVal (0);
}
if (IS_LITERAL(val->etype)) {
- if (compareType(type, val->etype) == 0) {
+ if (0 && compareType(type, val->etype) == 0) {
werrorfl (ilist->filename, ilist->lineno, E_INCOMPAT_TYPES);
printFromToType (val->type, type);
}
/* now generate the name */
if (!val->sym) {
- pic16_printGPointerType (val->name, DCL_TYPE(val->type), ptype, p);
+ pic16_printGPointerType (val->name, CPOINTER /*DCL_TYPE(val->type)*/, ptype, p);
} else {
- pic16_printGPointerType (val->sym->rname, DCL_TYPE(val->type), ptype, p);
+ pic16_printGPointerType (val->sym->rname, CPOINTER /*DCL_TYPE(val->type)*/, ptype, p);
if(IS_FUNC(val->sym->type) && !val->sym->used && !IS_STATIC(val->sym->etype)) {
/*-----------------------------------------------------------------*/
/* pic16_printIvalPtr - generates initial value for pointers */
/*-----------------------------------------------------------------*/
-void pic16_printIvalPtr (symbol * sym, sym_link * type, initList * ilist, char ptype, void *p)
+static void
+pic16_printIvalPtr (symbol * sym, sym_link * type, initList * ilist, char ptype, void *p)
{
value *val;
int size;
}
else if (size == 3)
{
- pic16_printGPointerType (val->name, (IS_PTR(type)?DCL_TYPE(type):PTR_TYPE(SPEC_OCLS(sym->etype))),
- ptype, p);
+ int itype = 0;
+ itype = PTR_TYPE (SPEC_OCLS (val->etype));
+ pic16_printGPointerType (val->name, itype, ptype, p);
} else
assert(0);
return;
}
}
-int PIC16_IS_CONFIG_ADDRESS(int address)
+static int
+PIC16_IS_CONFIG_ADDRESS(int address)
{
return ((address >= pic16->cwInfo.confAddrStart && address <= pic16->cwInfo.confAddrEnd));
}
-int PIC16_IS_IDLOC_ADDRESS(int address)
+static int
+PIC16_IS_IDLOC_ADDRESS(int address)
{
return ((address >= pic16->idInfo.idAddrStart && address <= pic16->idInfo.idAddrEnd));
}
-/* wrapper function for the above */
-int PIC16_IS_HWREG_ADDRESS(int address)
-{
- return (PIC16_IS_CONFIG_ADDRESS(address) || PIC16_IS_IDLOC_ADDRESS(address));
-}
-
-
/*-----------------------------------------------------------------*/
/* emitStaticSeg - emitcode for the static segment */
/*-----------------------------------------------------------------*/
/* symbol doesn't have absolute address but has initial value */
dbuf_printf (&code->oBuf, "%s:\n", sym->rname);
- noAlloc++;
+ ++noAlloc;
resolveIvalSym (sym->ival, sym->type);
pb = pic16_newpCodeChain(NULL, 'P',pic16_newpCodeCharP("; Starting pCode block for Ival"));
//fprintf(stderr, "%s:%d [2] generating init for label: %s\n", __FILE__, __LINE__, sym->rname);
pic16_printIval(sym, sym->type, sym->ival, 'p', (void *)pb);
pic16_flushDB('p', (void *)pb);
- noAlloc--;
+ --noAlloc;
} else {
/* symbol doesn't have absolute address and no initial value */
static void
pic16initialComments (FILE * afile)
{
- initialComments (afile);
- fprintf (afile, "; PIC16 port for the Microchip 16-bit core micros\n");
- if(xinst)
- fprintf (afile, "; * Extended Instruction Set\n");
-
- if(pic16_mplab_comp)
- fprintf(afile, "; * MPLAB/MPASM/MPASMWIN/MPLINK compatibility mode enabled\n");
- fprintf (afile, iComments2);
-
- if(options.debug) {
- fprintf (afile, "\n\t.ident \"SDCC version %s #%s [pic16 port]%s\"\n",
- SDCC_VERSION_STR, getBuildNumber(), (!xinst?"":" {extended}") );
- }
+ initialComments (afile);
+ fprintf (afile, "; PIC16 port for the Microchip 16-bit core micros\n");
+ if (pic16_options.xinst) {
+ fprintf (afile, "; * Extended Instruction Set\n");
+ } // if
+
+ if (pic16_mplab_comp) {
+ fprintf(afile, "; * MPLAB/MPASM/MPASMWIN/MPLINK compatibility mode enabled\n");
+ } // if
+ fprintf (afile, iComments2);
+
+ if (options.debug) {
+ fprintf (afile, "\n\t.ident \"SDCC version %s #%s [pic16 port]%s\"\n",
+ SDCC_VERSION_STR, getBuildNumber(), (!pic16_options.xinst?"":" {extended}") );
+ } // if
}
int
}
}
-void emitStatistics(FILE *asmFile)
+static void
+emitStatistics(FILE *asmFile)
{
unsigned long isize, udsize, ramsize;
statistics.isize = pic16_countInstructions();