+2008-02-20 Maarten Brock <sourceforge.brock AT dse.nl>
+
+ * src/SDCCpeeph.c (operandBaseName): added check for @Ri
+ * src/mcs51/peeph.def (rule 177.c): added operandsNotRelated(%1 %3)
+ fixes bug 1739475, thanks Robert Larice
+ (rule 271): new, added
+
2008-02-18 Borut Razem <borut.razem AT siol.net>
* sim/ucsim/s51.src/Makefile.in: fixed error made in previous commit
#endif
/*-----------------------------------------------------------------*/
-/* pcDistance - afinds a label back ward or forward */
+/* pcDistance - finds a label backward or forward */
/*-----------------------------------------------------------------*/
static int
SNPRINTF (buff, sizeof(buff), "%s:", lbl);
while (pl)
{
-
if (pl->line &&
!pl->isComment &&
!pl->isLabel &&
- !pl->isDebug) {
- if (port->peep.getSize) {
- dist += port->peep.getSize(pl);
- } else {
- dist += 3;
- }
+ !pl->isDebug)
+ {
+ if (port->peep.getSize)
+ {
+ dist += port->peep.getSize(pl);
+ }
+ else
+ {
+ dist += 3;
+ }
}
if (strncmp (pl->line, buff, strlen (buff)) == 0)
return FALSE;
/* calculate the label distance : the jump for reladdr can be
- +/- 127 bytes, here Iam assuming that an average 8051
+ +/- 127 bytes, here I am assuming that an average 8051
instruction is 2 bytes long, so if the label is more than
63 intructions away, the label is considered out of range
for a relative jump. we could get more precise this will
return "a";
if (!strncmp (op, "ar", 2) && ISCHARDIGIT(*(op+2)) && !*(op+3))
return op+1;
+ // bug 1739475, temp fix
+ if (op[0] == '@')
+ return operandBaseName(op+1);
}
return op;
} by {
; Peephole 177.c removed redundant mov
mov %1,%3
-} if notVolatile %1 %2
+} if notVolatile(%1 %2),operandsNotRelated(%1 %3)
// applies to f.e. bug-408972.c
// not before peephole 177.c
; Peephole 270 removed redundant add
add a,#%1+%2
}
+
+replace {
+ jz %1
+ mov %2,%4
+ sjmp %3
+%1:
+ mov %2,#0x00
+%3:
+} by {
+ jz %1
+ ; Peephole 271 optimized ternary operation (acc different)
+ mov a,%4
+%1:
+ mov %2,a
+%3:
+} if operandsNotRelated('a' 'dptr' %2), labelRefCount(%1 1), labelRefCountChange(%3 -1)
+
+
replace restart {
pop ar%1
} by {