isn++;
for (i=fp->swval; ; i++) {
if (i==fp->swval) {
- printf("L%d\n", fp->swlab);
+ printf(".dw L%d\n", fp->swlab);
if (fp==lp)
break;
fp++;
} else
- printf("L%d\n", deflab);
+ printf(".dw L%d\n", deflab);
}
printf(".area text\n");
return;
printf(hashsw, tabs, i, i);
isn++;
for (i=0; i<tabs; i++)
- printf("L%d\n", isn+i);
+ printf(".dw L%d\n", isn+i);
printf(".area text\n");
for (i=0; i<tabs; i++) {
printf("L%d:", isn++);
switch(op =& 0377) {
case SINIT:
+ fprintf(stderr, "SINIT\n");
printf("%d\n", geti());
break;
case EOFC:
+ fprintf(stderr, "EOFC\n");
return;
case BDATA:
+ fprintf(stderr, "BDATA\n");
if (geti() == 1) {
printf(".db ");
for (;;) {
break;
case PROG:
+ fprintf(stderr, "PROG\n");
printf(".area text\n");
break;
case DATA:
+ fprintf(stderr, "DATA\n");
printf(".area data\n");
break;
case BSS:
+ fprintf(stderr, "BSS\n");
printf(".area bss\n");
break;
case SYMDEF:
+ fprintf(stderr, "SYMDEF\n");
outname(s);
if (s[0])
printf(".globl %.8s\n", s);
break;
case RETRN:
+ fprintf(stderr, "RETRN\n");
printf(".globl cret\njmp cret\n");
break;
case CSPACE:
+ fprintf(stderr, "CSPACE\n");
t = outname(s);
printf(".comm %.8s,%d\n", t, geti());
break;
case SSPACE:
+ fprintf(stderr, "SSPACE\n");
printf(".=.+%d\n", (t=geti()));
totspace += (unsigned)t;
break;
case EVEN:
+ fprintf(stderr, "EVEN\n");
printf(".even\n");
break;
case SAVE:
+ fprintf(stderr, "SAVE\n");
printf(".globl csv\njsr r5,csv\n");
break;
case SETSTK:
+ fprintf(stderr, "SETSTK\n");
t = geti()-6;
if (t==2)
printf("tst -(sp)\n");
break;
case PROFIL:
+ fprintf(stderr, "PROFIL\n");
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);
break;
case SNAME:
+ fprintf(stderr, "SNAME\n");
t = outname(s);
printf(";~%s=L%d\n", t+1, geti());
break;
case ANAME:
+ fprintf(stderr, "ANAME\n");
t = outname(s);
printf(";~%s=%d\n", t+1, geti());
break;
case RNAME:
+ fprintf(stderr, "RNAME\n");
t = outname(s);
printf(";~%s=r%d\n", t+1, geti());
break;
case SWIT:
+ fprintf(stderr, "SWIT\n");
t = geti();
line = geti();
curbase = funcbase;
break;
case C3BRANCH: /* for fortran [sic] */
+ fprintf(stderr, "C3BRANCH\n");
lbl = geti();
lbl2 = geti();
lbl3 = geti();
goto xpr;
case CBRANCH:
+ fprintf(stderr, "CBRANCH\n");
lbl = geti();
cond = geti();
case EXPR:
+ fprintf(stderr, "EXPR\n");
xpr:
line = geti();
if (sp != &expstack[1]) {
break;
case NAME:
+ fprintf(stderr, "NAME\n");
t = geti();
if (t==EXTERN) {
np = getblk(sizeof(*xnp));
break;
case CON:
+ fprintf(stderr, "CON\n");
t = geti();
*sp++ = tconst(geti(), t);
break;
case LCON:
+ fprintf(stderr, "LCON\n");
geti(); /* ignore type, assume long */
t = geti();
op = geti();
break;
case FCON:
+ fprintf(stderr, "FCON\n");
t = geti();
outname(numbuf);
fp = getblk(sizeof(*fp));
break;
case FSEL:
+ fprintf(stderr, "FSEL\n");
*sp = tnode(FSEL, geti(), *--sp, NULL);
t = geti();
(*sp++)->tr2 = tnode(COMMA, INT, tconst(geti(), INT), tconst(t, INT));
break;
case STRASG:
+ fprintf(stderr, "STRASG\n");
sap = getblk(sizeof(*sap));
sap->op = STRASG;
sap->type = geti();
break;
case NULLOP:
+ fprintf(stderr, "NULLOP\n");
*sp++ = tnode(0, 0, NULL, NULL);
break;
case LABEL:
+ fprintf(stderr, "LABEL\n");
label(geti());
break;
case NLABEL:
+ fprintf(stderr, "NLABEL\n");
t = outname(s);
printf("%.8s:\n", t, t);
break;
case RLABEL:
+ fprintf(stderr, "RLABEL\n");
t = outname(s);
printf("%.8s:\n;~~%s:\n", t, t+1);
break;
case BRANCH:
+ fprintf(stderr, "BRANCH\n");
branch(geti(), 0);
break;
case SETREG:
+ fprintf(stderr, "SETREG\n");
nreg = geti()-1;
break;
default:
if (opdope[op]&BINARY) {
+ fprintf(stderr, "binary\n");
if (sp < &expstack[1]) {
error("Binary expression botch");
exit(1);
t = *--sp;
*sp++ = tnode(op, geti(), *--sp, t);
} else
+ {
+ fprintf(stderr, "unary\n");
sp[-1] = tnode(op, geti(), sp[-1]);
+ }
break;
}
}