char buff[MAX_PATTERN_LEN];
int dist = 0;
- sprintf (buff, "%s:", lbl);
+ SNPRINTF (buff, sizeof(buff), "%s:", lbl);
while (pl)
{
return 0;
}
+/*-----------------------------------------------------------------*/
+/* flat24bitModeAndPortDS390 - */
+/*-----------------------------------------------------------------*/
+FBYNAME (flat24bitModeAndPortDS390)
+{
+ return ((strcmp(port->target,"ds390") == 0) &&
+ (options.model == MODEL_FLAT24));
+}
+
+/*-----------------------------------------------------------------*/
+/* portIsDS390 - return true if port is DS390 */
+/*-----------------------------------------------------------------*/
+FBYNAME (portIsDS390)
+{
+ return (strcmp(port->target,"ds390") == 0);
+}
+
/*-----------------------------------------------------------------*/
/* flat24bitMode - will check to see if we are in flat24 mode */
/*-----------------------------------------------------------------*/
return (options.model == MODEL_FLAT24);
}
+/*-----------------------------------------------------------------*/
+/* xramMovcOption - check if using movc to read xram */
+/*-----------------------------------------------------------------*/
+FBYNAME (xramMovcOption)
+{
+ return (options.xram_movc && (strcmp(port->target,"mcs51") == 0));
+}
+
/*-----------------------------------------------------------------*/
/* labelInRange - will check to see if label %5 is within range */
/*-----------------------------------------------------------------*/
return TRUE;
}
+/*-----------------------------------------------------------------*/
+/* operandsNotSame3- check if any pair of %1,%2,%3 are the same */
+/*-----------------------------------------------------------------*/
+FBYNAME (operandsNotSame3)
+{
+ char *op1 = hTabItemWithKey (vars, 1);
+ char *op2 = hTabItemWithKey (vars, 2);
+ char *op3 = hTabItemWithKey (vars, 3);
+
+ if ( (strcmp (op1, op2) == 0) ||
+ (strcmp (op1, op3) == 0) ||
+ (strcmp (op2, op3) == 0) )
+ return FALSE;
+ else
+ return TRUE;
+}
+
+/*-----------------------------------------------------------------*/
+/* operandsNotSame4- check if any pair of %1,%2,%3,.. are the same */
+/*-----------------------------------------------------------------*/
+FBYNAME (operandsNotSame4)
+{
+ char *op1 = hTabItemWithKey (vars, 1);
+ char *op2 = hTabItemWithKey (vars, 2);
+ char *op3 = hTabItemWithKey (vars, 3);
+ char *op4 = hTabItemWithKey (vars, 4);
+
+ if ( (strcmp (op1, op2) == 0) ||
+ (strcmp (op1, op3) == 0) ||
+ (strcmp (op1, op4) == 0) ||
+ (strcmp (op2, op3) == 0) ||
+ (strcmp (op2, op4) == 0) ||
+ (strcmp (op3, op4) == 0) )
+ return FALSE;
+ else
+ return TRUE;
+}
+
+/*-----------------------------------------------------------------*/
+/* operandsNotSame5- check if any pair of %1,%2,%3,.. are the same */
+/*-----------------------------------------------------------------*/
+FBYNAME (operandsNotSame5)
+{
+ char *op1 = hTabItemWithKey (vars, 1);
+ char *op2 = hTabItemWithKey (vars, 2);
+ char *op3 = hTabItemWithKey (vars, 3);
+ char *op4 = hTabItemWithKey (vars, 4);
+ char *op5 = hTabItemWithKey (vars, 5);
+
+ if ( (strcmp (op1, op2) == 0) ||
+ (strcmp (op1, op3) == 0) ||
+ (strcmp (op1, op4) == 0) ||
+ (strcmp (op1, op5) == 0) ||
+ (strcmp (op2, op3) == 0) ||
+ (strcmp (op2, op4) == 0) ||
+ (strcmp (op2, op5) == 0) ||
+ (strcmp (op3, op4) == 0) ||
+ (strcmp (op3, op5) == 0) ||
+ (strcmp (op4, op5) == 0) )
+ return FALSE;
+ else
+ return TRUE;
+}
+
+/*-----------------------------------------------------------------*/
+/* operandsNotSame6- check if any pair of %1,%2,%3,.. are the same */
+/*-----------------------------------------------------------------*/
+FBYNAME (operandsNotSame6)
+{
+ char *op1 = hTabItemWithKey (vars, 1);
+ char *op2 = hTabItemWithKey (vars, 2);
+ char *op3 = hTabItemWithKey (vars, 3);
+ char *op4 = hTabItemWithKey (vars, 4);
+ char *op5 = hTabItemWithKey (vars, 5);
+ char *op6 = hTabItemWithKey (vars, 6);
+
+ if ( (strcmp (op1, op2) == 0) ||
+ (strcmp (op1, op3) == 0) ||
+ (strcmp (op1, op4) == 0) ||
+ (strcmp (op1, op5) == 0) ||
+ (strcmp (op1, op6) == 0) ||
+ (strcmp (op2, op3) == 0) ||
+ (strcmp (op2, op4) == 0) ||
+ (strcmp (op2, op5) == 0) ||
+ (strcmp (op2, op6) == 0) ||
+ (strcmp (op3, op4) == 0) ||
+ (strcmp (op3, op5) == 0) ||
+ (strcmp (op3, op6) == 0) ||
+ (strcmp (op4, op5) == 0) ||
+ (strcmp (op4, op6) == 0) ||
+ (strcmp (op5, op6) == 0) )
+ return FALSE;
+ else
+ return TRUE;
+}
+
+
+/*-----------------------------------------------------------------*/
+/* operandsNotSame7- check if any pair of %1,%2,%3,.. are the same */
+/*-----------------------------------------------------------------*/
+FBYNAME (operandsNotSame7)
+{
+ char *op1 = hTabItemWithKey (vars, 1);
+ char *op2 = hTabItemWithKey (vars, 2);
+ char *op3 = hTabItemWithKey (vars, 3);
+ char *op4 = hTabItemWithKey (vars, 4);
+ char *op5 = hTabItemWithKey (vars, 5);
+ char *op6 = hTabItemWithKey (vars, 6);
+ char *op7 = hTabItemWithKey (vars, 7);
+
+ if ( (strcmp (op1, op2) == 0) ||
+ (strcmp (op1, op3) == 0) ||
+ (strcmp (op1, op4) == 0) ||
+ (strcmp (op1, op5) == 0) ||
+ (strcmp (op1, op6) == 0) ||
+ (strcmp (op1, op7) == 0) ||
+ (strcmp (op2, op3) == 0) ||
+ (strcmp (op2, op4) == 0) ||
+ (strcmp (op2, op5) == 0) ||
+ (strcmp (op2, op6) == 0) ||
+ (strcmp (op2, op7) == 0) ||
+ (strcmp (op3, op4) == 0) ||
+ (strcmp (op3, op5) == 0) ||
+ (strcmp (op3, op6) == 0) ||
+ (strcmp (op3, op7) == 0) ||
+ (strcmp (op4, op5) == 0) ||
+ (strcmp (op4, op6) == 0) ||
+ (strcmp (op4, op7) == 0) ||
+ (strcmp (op5, op6) == 0) ||
+ (strcmp (op5, op7) == 0) ||
+ (strcmp (op6, op7) == 0) )
+ return FALSE;
+ else
+ return TRUE;
+}
+
+/*-----------------------------------------------------------------*/
+/* operandsNotSame8- check if any pair of %1,%2,%3,.. are the same */
+/*-----------------------------------------------------------------*/
+FBYNAME (operandsNotSame8)
+{
+ char *op1 = hTabItemWithKey (vars, 1);
+ char *op2 = hTabItemWithKey (vars, 2);
+ char *op3 = hTabItemWithKey (vars, 3);
+ char *op4 = hTabItemWithKey (vars, 4);
+ char *op5 = hTabItemWithKey (vars, 5);
+ char *op6 = hTabItemWithKey (vars, 6);
+ char *op7 = hTabItemWithKey (vars, 7);
+ char *op8 = hTabItemWithKey (vars, 8);
+
+ if ( (strcmp (op1, op2) == 0) ||
+ (strcmp (op1, op3) == 0) ||
+ (strcmp (op1, op4) == 0) ||
+ (strcmp (op1, op5) == 0) ||
+ (strcmp (op1, op6) == 0) ||
+ (strcmp (op1, op7) == 0) ||
+ (strcmp (op1, op8) == 0) ||
+ (strcmp (op2, op3) == 0) ||
+ (strcmp (op2, op4) == 0) ||
+ (strcmp (op2, op5) == 0) ||
+ (strcmp (op2, op6) == 0) ||
+ (strcmp (op2, op7) == 0) ||
+ (strcmp (op2, op8) == 0) ||
+ (strcmp (op3, op4) == 0) ||
+ (strcmp (op3, op5) == 0) ||
+ (strcmp (op3, op6) == 0) ||
+ (strcmp (op3, op7) == 0) ||
+ (strcmp (op3, op8) == 0) ||
+ (strcmp (op4, op5) == 0) ||
+ (strcmp (op4, op6) == 0) ||
+ (strcmp (op4, op7) == 0) ||
+ (strcmp (op4, op8) == 0) ||
+ (strcmp (op5, op6) == 0) ||
+ (strcmp (op5, op7) == 0) ||
+ (strcmp (op5, op8) == 0) ||
+ (strcmp (op6, op7) == 0) ||
+ (strcmp (op6, op8) == 0) ||
+ (strcmp (op7, op8) == 0) )
+ return FALSE;
+ else
+ return TRUE;
+}
+
+
/* labelRefCount:
* takes two parameters: a variable (bound to a label name)
"operandsNotSame", operandsNotSame
}
,
+ {
+ "operandsNotSame3", operandsNotSame3
+ }
+ ,
+ {
+ "operandsNotSame4", operandsNotSame4
+ }
+ ,
+ {
+ "operandsNotSame5", operandsNotSame5
+ }
+ ,
+ {
+ "operandsNotSame6", operandsNotSame6
+ }
+ ,
+ {
+ "operandsNotSame7", operandsNotSame7
+ }
+ ,
+ {
+ "operandsNotSame8", operandsNotSame8
+ }
+ ,
{
"24bitMode", flat24bitMode
}
,
+ {
+ "xramMovcOption", xramMovcOption
+ }
+ ,
{
"labelRefCount", labelRefCount
}
,
+ {
+ "portIsDS390", portIsDS390
+ },
+ {
+ "24bitModeAndPortDS390", flat24bitModeAndPortDS390
+ }
};
int i;
if (cond && *cond)
{
- pr->cond = Safe_alloc ( strlen (cond) + 1);
- strcpy (pr->cond, cond);
+ pr->cond = Safe_strdup (cond);
}
else
pr->cond = NULL;
lineNode *pl;
pl = Safe_alloc ( sizeof (lineNode));
- pl->line = Safe_alloc ( strlen (line) + 1);
- strcpy (pl->line, line);
+ pl->line = Safe_strdup (line);
return pl;
}
if (*vvx == ')')
ubb--;
}
+ // include the trailing ')'
+ *vv++ = *vvx++;
}
else
*vv++ = *vvx++;
*s = vvx;
*vv = '\0';
/* got value */
- vvx = traceAlloc (&_G.values, Safe_alloc(strlen (vval) + 1));
- strcpy (vvx, vval);
+ vvx = traceAlloc (&_G.values, Safe_strdup(vval));
hTabAddItem (vtab, key, vvx);
}
lbp = lb;
l = pl->line;
+
while (*l)
{
/* if the line contains a variable */
(*shead)->prev->next = lhead;
lhead->prev = (*shead)->prev;
}
- else
- *shead = lhead;
+ *shead = lhead;
/* now for the tail */
if (stail && stail->next)
{
lineNode *mtail = NULL;
bool restart;
+#if !OPT_DISABLE_PIC
+ /* The PIC port uses a different peep hole optimizer based on "pCode" */
+ if (TARGET_IS_PIC)
+ return;
+#endif
+
assert(labelHash == NULL);
do
/* for all rules */
for (pr = rootRules; pr; pr = pr->next)
{
- fflush(stdout);
-
for (spl = *pls; spl; spl = spl->next)
{
/* if inline assembler then no peep hole */
continue;
mtail = NULL;
-
+
/* Tidy up any data stored in the hTab */
/* if it matches */
if (rs)
{
rs = Safe_realloc (rs, strlen (rs) + strlen (lb) + 1);
- strcat (rs, lb);
+ strncatz (rs, lb, strlen (rs) + strlen (lb) + 1);
}
else
{
- rs = Safe_alloc ( strlen (lb) + 1);
- strcpy (rs, lb);
+ rs = Safe_strdup (lb);
}
nch = 0;
}
if (rs)
{
rs = Safe_realloc (rs, strlen (rs) + strlen (lb) + 1);
- strcat (rs, lb);
+ strncatz (rs, lb, strlen (rs) + strlen (lb) + 1);
}
else
{
- rs = Safe_alloc ( strlen (lb) + 1);
- strcpy (rs, lb);
+ rs = Safe_strdup (lb);
}
}
return rs;