int currRegBank = 0;
struct optimize optimize;
struct options options;
-char *VersionString = SDCC_VERSION_STR /*"Version 2.1.8a" */ ;
+char *VersionString = SDCC_VERSION_STR;
int preProcOnly = 0;
int noAssemble = 0;
char *linkOptions[128];
{ 0, "--cyclomatic", &options.cyclomatic, NULL },
{ 0, "--nooverlay", &options.noOverlay, NULL },
{ 0, "--main-return", &options.mainreturn, "Issue a return after main()" },
+ { 0, "--xram-movc", &options.xram_movc, "Use movc instead of movx to read xram (xdata)" },
{ 0, "--no-peep", &options.nopeep, "Disable the peephole assembly file optimisation" },
{ 0, "--no-reg-params", &options.noRegParams, "On some ports, disable passing some parameters in registers" },
{ 0, "--peep-asm", &options.asmpeep, NULL },
{ 0, "--all-callee-saves", &options.all_callee_saves, "callee will always save registers used" },
{ 0, "--use-accelerator", &options.useAccelerator,"generate code for DS390 Arithmetic Accelerator"},
{ 0, "--stack-probe", &options.stack_probe,"insert call to function __stack_probe at each function prologue"},
- { 0, "--tini-libid", NULL,"<nnnn> LibraryID used in -mTININative"}
+ { 0, "--tini-libid", NULL,"<nnnn> LibraryID used in -mTININative"},
+ { 0, "--protect-sp-update", &options.protect_sp_update,"DS390 - will disable interrupts during ESP:SP updates"},
+ { 0, "--parms-in-bank1", &options.parms_in_bank1,"MCS51/DS390 - use Bank1 for parameter passing"}
};
/** Table of all unsupported options and help text to display when one
#if !OPT_DISABLE_TININative
&tininative_port,
#endif
+#if !OPT_DISABLE_XA51
+ &xa51_port,
+#endif
};
#define NUM_PORTS (sizeof(_ports)/sizeof(_ports[0]))
/* copy the file name into the buffer */
strcpy (buffer, s);
- /* get rid of the "." */
- strtok (buffer, ".");
+ /* get rid of the "."-extension */
+
+ /* is there a dot at all? */
+ if (strchr (buffer, '.') &&
+ /* is the dot in the filename, not in the path? */
+ (strrchr (buffer, '/' ) < strrchr (buffer, '.') ||
+ strrchr (buffer, '\\') < strrchr (buffer, '.')))
+ *strrchr (buffer, '.') = '\0';
+
srcFileName = Safe_alloc ( strlen (buffer) + 1);
strcpy (srcFileName, buffer);
WRITE_SEG_LOC (XDATA_NAME, options.xdata_loc);
/* indirect data */
- WRITE_SEG_LOC (IDATA_NAME, options.idata_loc);
+ if (IDATA_NAME) {
+ WRITE_SEG_LOC (IDATA_NAME, options.idata_loc);
+ }
/* bit segment start */
WRITE_SEG_LOC (BIT_NAME, 0);
/* standard library path */
if (!options.nostdlib)
{
-/****
- if (TARGET_IS_DS390)
+ switch (options.model)
{
+ case MODEL_SMALL:
+ c = "small";
+ break;
+ case MODEL_LARGE:
+ c = "large";
+ break;
+ case MODEL_FLAT24:
+ /* c = "flat24"; */
c = "ds390";
- }
- else
-*****/
- {
- switch (options.model)
- {
- case MODEL_SMALL:
- c = "small";
- break;
- case MODEL_LARGE:
- c = "large";
- break;
- case MODEL_FLAT24:
- /* c = "flat24"; */
- c = "ds390";
- break;
- default:
- werror (W_UNKNOWN_MODEL, __FILE__, __LINE__);
- c = "unknown";
- break;
- }
+ break;
+ case MODEL_PAGE0:
+ c = "xa51";
+ break;
+ default:
+ werror (W_UNKNOWN_MODEL, __FILE__, __LINE__);
+ c = "unknown";
+ break;
}
mfprintf (lnkfile, getRuntimeVariables(), "-k {libdir}{sep}%s\n", c);
/* standard library files */
- /* if (strcmp (port->target, "ds390") == 0) */
if (options.model == MODEL_FLAT24)
{
fprintf (lnkfile, "-l %s\n", STD_DS390_LIB);
}
+ if (options.model == MODEL_PAGE0)
+ {
+ fprintf (lnkfile, "-l %s\n", STD_XA51_LIB);
+ }
fprintf (lnkfile, "-l %s\n", STD_LIB);
fprintf (lnkfile, "-l %s\n", STD_INT_LIB);
fprintf (lnkfile, "-l %s\n", STD_LONG_LIB);
case MODEL_FLAT24:
addToList (preArgv, "-DSDCC_MODEL_FLAT24");
break;
+ case MODEL_PAGE0:
+ addToList (preArgv, "-DSDCC_MODEL_PAGE0");
+ break;
default:
werror (W_UNKNOWN_MODEL, __FILE__, __LINE__);
break;
if (srcFileName)
{
- preProcess (envp);
initMem ();
port->finaliseOptions ();
+ preProcess (envp);
initSymt ();
initiCode ();