#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;
}
*/
}
+/* 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[] =
{
- "gplink", "-nf", "$1", NULL
+ "gplink", "-o $2", "\"$1.o\"", "$l", NULL
};
static const char *_asmCmd[] =
{
- "gpasm", "-c", "$1.asm", NULL
+ "gpasm", "$l", "-c", "\"$1.asm\"", NULL
};
"MCU pic", /* Target name */
"", /* Processor */
{
+ picglue,
TRUE, /* Emit glue around main */
MODEL_SMALL | MODEL_LARGE | MODEL_FLAT24,
MODEL_SMALL
_linkCmd,
NULL,
NULL,
- ".o"
+ ".o",
+ 0
},
{
_defaultRules
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 ! > */