psymbol->value = pdot->value;
#ifdef TRANSLATE
// reset locals
- xlabnext = 0;
- memset(xlabb, 0xff, 10 * sizeof(int));
- memset(xlabf, 0xff, 10 * sizeof(int));
+ // for asxlat, -u means local labels will be changed to ordinary labels
+ // (use this when there is an inconvenient ordinary label within locals)
+ if (defund != FGLOBAL) {
+ xlabnext = 0;
+ memset(xlabb, 0xff, 10 * sizeof(int));
+ memset(xlabf, 0xff, 10 * sizeof(int));
+ }
#endif
continue;
xlabb[label] = xlab;
if (xstartpsave >= xbuf + 0xff0)
abort();
- xbufp = xstartpsave + sprintf(xstartpsave, "%d$:", xlab);
+ // for asxlat, -u means local labels will be changed to ordinary labels
+ // (use this when there is an inconvenient ordinary label within locals)
+ if (defund == FGLOBAL)
+ xbufp = xstartpsave + sprintf(xstartpsave, "_%d:", xlab);
+ else
+ xbufp = xstartpsave + sprintf(xstartpsave, "%d$:", xlab);
#endif
/* cmp fbfree,$4 / room for another fb entry? */
/* 1: */
void p0xpr() {
-#ifdef TRANSLATE
- xrestn = xbufp - xstartp;
- memcpy(xrest, xstartp, xrestn);
- if (xstartp + xrestn >= xbuf + 0xff0)
- abort();
- xbufp = xstartp + sprintf(xstartp, ".dw ");
- xstartp = xbufp; // for local labels
- memcpy(xbufp, xrest, xrestn);
- xbufp += xrestn;
-#endif
p0expres();
pdot->value += 2;
}
p0opl17();
}
else
+ {
+#ifdef TRANSLATE
+ xrestn = xbufp - xstartp;
+ memcpy(xrest, xstartp, xrestn);
+ if (xstartp + xrestn >= xbuf + 0xff0)
+ abort();
+ xbufp = xstartp + sprintf(xstartp, ".dw ");
+ xstartp = xbufp; // for local labels
+ memcpy(xbufp, xrest, xrestn);
+ xbufp += xrestn;
+#endif
p0xpr();
+ }
return;
}
psymbol = (struct symbol *)token;
flags = psymbol->flags;
if (flags <= FBSS || flags == FREGISTER || flags > FJCOND) {
+#ifdef TRANSLATE
+ if (flags != FABS) { // assume for now that ABS symbol can only be an opcode
+ xrestn = xbufp - xstartp;
+ memcpy(xrest, xstartp, xrestn);
+ if (xstartp + xrestn >= xbuf + 0xff0)
+ abort();
+ xbufp = xstartp + sprintf(xstartp, ".dw ");
+ xstartp = xbufp; // for local labels
+ memcpy(xbufp, xrest, xrestn);
+ xbufp += xrestn;
+ }
+#endif
p0xpr();
return;
}
#ifdef TRANSLATE
if (xstartp >= xbuf + 0xff0)
abort();
- xbufp = xstartp + sprintf(xstartp, "%d$", xlabb[token - TLABEL]);
+ // for asxlat, -u means local labels will be changed to ordinary labels
+ // (use this when there is an inconvenient ordinary label within locals)
+ if (defund == FGLOBAL)
+ xbufp = xstartp + sprintf(xstartp, "_%d", xlabb[token - TLABEL]);
+ else
+ xbufp = xstartp + sprintf(xstartp, "%d$", xlabb[token - TLABEL]);
#endif
rightflags = curfbr[token - TLABEL];
/* bug!! should be rightvalue / rightflags below: */
xlabf[xlab] = xlabnext++;
if (xstartp >= xbuf + 0xff0)
abort();
- xbufp = xstartp + sprintf(xstartp, "%d$", xlabf[xlab]);
+ // for asxlat, -u means local labels will be changed to ordinary labels
+ // (use this when there is an inconvenient ordinary label within locals)
+ if (defund == FGLOBAL)
+ xbufp = xstartp + sprintf(xstartp, "_%d", xlabf[xlab]);
+ else
+ xbufp = xstartp + sprintf(xstartp, "%d$", xlabf[xlab]);
}
#endif
leftflags = 0;