#include "ralloc.h"
#include "device.h"
#include "SDCCutil.h"
+#include "glue.h"
//#include "gen.h"
return 1;
}
+extern char *udata_section_name;
+
static bool
_pic14_parseOptions (int *pargc, char **argv, int *i)
{
+ char buf[128];
+
/* TODO: allow port-specific command line options to specify
* segment names here.
*/
+
+ /* This is a temporary hack, to solve problems with some processors
+ * that do not have udata section. It will be changed when a more
+ * robust solution is figured out -- VR 27-11-2003 FIXME
+ */
+ strcpy(buf, "--udata-section-name");
+ if(!strncmp(buf, argv[ *i ], strlen(buf))) {
+ if(strlen(argv[ *i ]) <= strlen(buf)+1) {
+ fprintf(stderr, "WARNING: no `%s' entered\n", buf+2);
+ exit(-1);
+ } else {
+ udata_section_name = strdup( strchr(argv[*i], '=') + 1 );
+ }
+ return 1;
+ }
+
return FALSE;
}
}
fprintf (of, "\tlist\tp=%s\n",&name[1]);
- fprintf (of, "\t__CONFIG 0x%x\n",getConfigWord(0x2007));
fprintf (of, "\tradix dec");
fprintf (of, "\ninclude \"%s.inc\"\n",name);
}
static bool
_hasNativeMulFor (iCode *ic, sym_link *left, sym_link *right)
{
+/*
sym_link *test = NULL;
value *val;
+*/
fprintf(stderr,"checking for native mult\n");
*/
}
+/* Indicate which extended bit operations this port supports */
+static bool
+hasExtBitOp (int op, int size)
+{
+ if (op == RRC
+ || op == RLC
+ /* || op == GETHBIT */ /* GETHBIT doesn't look complete for PIC */
+ )
+ return TRUE;
+ else
+ return FALSE;
+}
+
+/* Indicate the expense of an access to an output storage class */
+static int
+oclsExpense (struct memmap *oclass)
+{
+ /* The IN_FARSPACE test is compatible with historical behaviour, */
+ /* but I don't think it is applicable to PIC. If so, please feel */
+ /* free to remove this test -- EEP */
+ if (IN_FARSPACE(oclass))
+ return 1;
+
+ return 0;
+}
+
/** $1 is always the basename.
$2 is always the output file.
$3 varies
*/
static const char *_linkCmd[] =
{
- "aslink", "-nf", "$1", NULL
+ "gplink", "-o $2", "\"$1.o\"", "$l", NULL
};
-/* Sigh. This really is not good. For now, I recommend:
- * sdcc -S -mpic14 file.c
- * the -S option does not compile or link
- */
static const char *_asmCmd[] =
{
- "gpasm", "-c -I /usr/local/share/gpasm/header", "$1.asm", NULL
+ "gpasm", "$l", "-c", "\"$1.asm\"", NULL
};
TARGET_ID_PIC,
"pic14",
"MCU pic", /* Target name */
- "p16f877", /* Processor */
+ "", /* Processor */
{
+ picglue,
TRUE, /* Emit glue around main */
MODEL_SMALL | MODEL_LARGE | MODEL_FLAT24,
MODEL_SMALL
_linkCmd,
NULL,
NULL,
- ".rel"
+ ".o",
+ 0
},
{
_defaultRules
{
"XSEG (XDATA)",
"STACK (DATA)",
- "CSEG (CODE)",
+ "code",
"DSEG (DATA)",
"ISEG (DATA)",
"XSEG (XDATA)",
"BSEG (BIT)",
"RSEG (DATA)",
"GSINIT (CODE)",
- "OSEG (OVR,DATA)",
+ "udata_ovr",
"GSFINAL (CODE)",
"HOME (CODE)",
NULL, // xidata
NULL,
1 // code is read only
},
+ { NULL, NULL },
{
+1, 1, 4, 1, 1, 0
},
_process_pragma, /* process a pragma */
NULL,
_hasNativeMulFor,
+ hasExtBitOp, /* hasExtBitOp */
+ oclsExpense, /* oclsExpense */
FALSE,
+ TRUE, /* little endian */
0, /* leave lt */
0, /* leave gt */
1, /* transform <= to ! > */