#include "c1.h"
+/* needed for restoring the area after common definition in asxxxx syntax */
+static char *area = "text";
+
max(a, b)
{
if (a>b)
#if TRACE_IR
fprintf(stderr, "SINIT\n");
#endif
- printf("%d\n", geti());
+ printf(".dw %d\n", geti());
break;
case EOFC:
fprintf(stderr, "BDATA\n");
#endif
if (geti() == 1) {
- printf(".db ");
+ printf(".db ");
for (;;) {
printf("%d", geti());
if (geti() != 1)
fprintf(stderr, "PROG\n");
#endif
printf(".area text\n");
+ area = "text";
break;
case DATA:
fprintf(stderr, "DATA\n");
#endif
printf(".area data\n");
+ area = "data";
break;
case BSS:
fprintf(stderr, "BSS\n");
#endif
printf(".area bss\n");
+ area = "bss";
break;
case SYMDEF:
fprintf(stderr, "CSPACE\n");
#endif
t = outname(s);
- printf(".comm %.8s,%d\n", t, geti());
+ printf(".area _%.8s (rel,ovr)\n%.8s:.ds %d\n.area %s\n", t, t, geti(), area);
break;
case SSPACE:
#if TRACE_IR
fprintf(stderr, "SSPACE\n");
#endif
- printf(".=.+%d\n", (t=geti()));
+ printf(".ds %d\n", (t=geti()));
totspace += (unsigned)t;
break;
#endif
t = geti();
printf("mov #L%d,r0\n.globl mcount\njsr pc,mcount\n", t);
- printf(".area bss\nL%d:.=.+2\n.area text\n", t);
+ printf(".area bss\nL%d:.ds 2\n.area text\n", t);
break;
case SNAME:
if (tp->op==RFORCE) { /* function return */
if (sfuncr.nloc==0) {
sfuncr.nloc = isn++;
- printf(".area bss\nL%d:.=.+%d\n.area text\n", sfuncr.nloc, nwords*sizeof(int));
+ printf(".area bss\nL%d:.ds %d\n.area text\n", sfuncr.nloc, nwords*sizeof(int));
}
atp->tr1 = tnode(ASSIGN, STRUCT, &sfuncr, tp->tr1);
strasg(atp);