--- /dev/null
+*.a
+*.o
+/usr/sys/conf/unix
--- /dev/null
+#!/bin/sh
+git checkout ../../../lib/c[012]
+mkdir --parents ../../../tmp
+export APOUT_ROOT=`pwd`/../../..
+export PATH=`pwd`/../../../bin:`pwd`
+(echo ==== c =====; cd c; make cp)
/*
* tack on the string file.
*/
- printf(".globl\n.data\n");
+ printf(".area data\n");
if (*argv[2] != '-') {
if (freopen(argv[2], "r", stdin)==NULL) {
error("Missing temp file");
}
tree = atree;
tree->op = CALL2;
+#if 0 /* seems to generate "jsr pc,*#label" instead of "jsr pc,label" */
if (modf && tree->tr1->op==NAME && tree->tr1->class==EXTERN)
tree->op = CALL1;
+#endif
if (cexpr(tree, regtab, reg)<0)
error("compiler botch: call");
popstk(r);
string = opt->tabstring;
p1 = tree->tr1;
if (p1->op==FCON && p1->value>0) {
- printf(".data\nL%d:%o;%o;%o;%o\n.text\n", p1->value, p1->fvalue);
+ printf(".area data\nL%d:%o;%o;%o;%o\n.area text\n", p1->value, p1->fvalue);
p1->value = -p1->value;
}
p2 = 0;
if (opdope[tree->op]&BINARY) {
p2 = tree->tr2;
if (p2->op==FCON && p2->value>0) {
- printf(".data\nL%d:%o;%o;%o;%o\n.text\n", p2->value, p2->fvalue);
+ printf(".area data\nL%d:%o;%o;%o;%o\n.area text\n", p2->value, p2->fvalue);
p2->value = -p2->value;
}
}
* Mask used in field assignments
*/
case 'Z':
- printf("$%o", tree->mask);
+ printf("#%o", tree->mask);
goto loop;
/*
} else {
if (retval!=0)
printf("mov r%d,r0\n", retval);
- printf("mov $%o,r1\n", size);
+ printf("mov #%o,r1\n", size);
printf("L%d:mov -(r0),-(sp)\ndec\tr1\njne\tL%d\n", isn, isn);
isn++;
}
switch(p->op) {
case LCON:
- printf("$%o", flag>10? p->lvalue.intx[1]:p->lvalue.intx[0]);
+ printf("#%o", flag>10? p->lvalue.intx[1]:p->lvalue.intx[0]);
return;
case SFCON:
case CON:
- printf("$");
+ printf("#");
psoct(p->value);
return;
return;
case AMPER:
- putchar('$');
+ putchar('#');
p = p->tr1;
if (p->op==NAME && p->class==REG)
regerr();
*/
char dirsw[] {"\
-cmp r0,$%o\n\
+cmp r0,#%o\n\
jhi L%d\n\
asl r0\n\
jmp *L%d(r0)\n\
-.data\n\
+.area data\n\
L%d:\
" };
char hashsw[] {"\
mov r0,r1\n\
clr r0\n\
-div $%o,r0\n\
+div #%o,r0\n\
asl r1\n\
jmp *L%d(r1)\n\
-.data\n\
+.area data\n\
L%d:\
"};
/* direct switch */
if (range>0 && range <= 3*ncase) {
if (fp->swval)
- printf("sub $%o,r0\n", fp->swval);
+ printf("sub #%o,r0\n", fp->swval);
printf(dirsw, range, deflab, isn, isn);
isn++;
for (i=fp->swval; ; i++) {
} else
printf("L%d\n", deflab);
}
- printf(".text\n");
+ printf(".area text\n");
return;
}
/* simple switch */
isn++;
for (i=0; i<tabs; i++)
printf("L%d\n", isn+i);
- printf(".text\n");
+ printf(".area text\n");
for (i=0; i<tabs; i++) {
printf("L%d:", isn++);
for (swp=fp; swp<=lp; swp++) {
if (v==0)
printf("tst r0\n");
else
- printf("cmp r0,$%o\n", v);
+ printf("cmp r0,#%o\n", v);
printf("jeq L%d\n", l);
}
}
if (cexpr(tree, cctab, reg) < 0) {
reg = rcexpr(tree, regtab, reg);
- printf("ashc $0,r%d\n", reg);
+ printf("ashc #0,r%d\n", reg);
branch(xlab1, op, 0);
}
xlab1 = xl1;
printf("cmp (sp)+,(sp)+\n");
return;
}
- printf("add $%o,sp\n", a);
+ printf("add #%o,sp\n", a);
}
error(s, p1, p2, p3, p4, p5, p6)
break;
case PROG:
- printf(".text\n");
+ printf(".area text\n");
break;
case DATA:
- printf(".data\n");
+ printf(".area data\n");
break;
case BSS:
- printf(".bss\n");
+ printf(".area bss\n");
break;
case SYMDEF:
break;
case RETRN:
- printf("jmp cret\n");
+ printf(".globl cret\njmp cret\n");
break;
case CSPACE:
break;
case SAVE:
- printf("jsr r5,csv\n");
+ printf(".globl csv\njsr r5,csv\n");
break;
case SETSTK:
if (t==2)
printf("tst -(sp)\n");
else if (t != 0)
- printf("sub $%o,sp\n", t);
+ printf("sub #%o,sp\n", t);
break;
case PROFIL:
t = geti();
- printf("mov $L%d,r0\njsr pc,mcount\n", t);
- printf(".bss\nL%d:.=.+2\n.text\n", t);
+ 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:
t = outname(s);
- printf("~%s=L%d\n", t+1, geti());
+ printf(";~%s=L%d\n", t+1, geti());
break;
case ANAME:
t = outname(s);
- printf("~%s=%o\n", t+1, geti());
+ printf(";~%s=%o\n", t+1, geti());
break;
case RNAME:
t = outname(s);
- printf("~%s=r%d\n", t+1, geti());
+ printf(";~%s=r%d\n", t+1, geti());
break;
case SWIT:
else {
if ((*sp)->type==LONG) {
rcexpr(tnode(RFORCE, (*sp)->type, *sp), efftab, 0);
- printf("ashc $0,r0\n");
+ printf("ashc #0,r0\n");
} else {
rcexpr(*sp, cctab, 0);
if (isfloat(*sp))
case RLABEL:
t = outname(s);
- printf("%.8s:\n~~%s:\n", t, t+1);
+ printf("%.8s:\n;~~%s:\n", t, t+1);
break;
case BRANCH:
if (tp->op==RFORCE) { /* function return */
if (sfuncr.nloc==0) {
sfuncr.nloc = isn++;
- printf(".bss\nL%d:.=.+%o\n.text\n", sfuncr.nloc, nwords*sizeof(int));
+ printf(".area bss\nL%d:.=.+%o\n.area text\n", sfuncr.nloc, nwords*sizeof(int));
}
atp->tr1 = tnode(ASSIGN, STRUCT, &sfuncr, tp->tr1);
strasg(atp);
- printf("mov $L%d,r0\n", sfuncr.nloc);
+ printf("mov #L%d,r0\n", sfuncr.nloc);
return;
}
if (tp->op==CALL) {
}
if (nreg<=1)
printf("mov r2,-(sp)\n");
- printf("mov $%o,r2\n", nwords);
+ printf("mov #%o,r2\n", nwords);
printf("L%d:mov (r1)+,(r0)+\ndec\tr2\njne\tL%d\n", isn, isn);
isn++;
if (nreg<=1)
char ash[] "ash";
char asl[] "asl";
char bic[] "bic";
-char bic1[] "bic $1,";
+char bic1[] "bic #1,";
char bit[] "bit";
-char bit1[] "bit $1,";
+char bit1[] "bit #1,";
char bis[] "bis";
-char bis1[] "bis $1,";
+char bis1[] "bis #1,";
char xor[] "xor";
char neg[] "neg";
char com[] "com";
-char stdol[] "*$";
+char stdol[] "*#";
char ashc[] "ashc";
char slmul[] "lmul";
char sldiv[] "ldiv";
"mul", MUL,
"ash", ASH,
"xor", XOR,
- ".text",TEXT,
- ".data",DATA,
- ".bss", BSS,
+ ".area text", TEXT,
+ ".area data", DATA,
+ ".area bss", BSS,
".even",EVEN,
"movf", MOVF,
"movof",MOVOF,
/*
* Notice addresses of the form
- * $xx,xx(r)
+ * #xx,xx(r)
* and replace them with (pc),xx(r)
* -- Thanx and a tip of the Hatlo hat to Bliss-11.
*/
register struct node *t;
t = at;
- if (*t->code != '$')
+ if (*t->code != '#')
return;
c1 = t->code;
while (*c1 != ',')
continue;
}
}
- if (equstr(regs[RT1], "$0")) {
+ if (equstr(regs[RT1], "#0")) {
p->op = CLR;
strcpy(regs[RT1], regs[RT2]);
regs[RT2][0] = 0;
case ASH:
dble:
dualop(p);
- if (p->op==BIC && (equstr(regs[RT1], "$-1") || equstr(regs[RT1], "$177777"))) {
+ if (p->op==BIC && (equstr(regs[RT1], "#-1") || equstr(regs[RT1], "#177777"))) {
p->op = CLR;
strcpy(regs[RT1], regs[RT2]);
regs[RT2][0] = 0;
p->code = copy(1, regs[RT1]);
goto sngl;
}
- if ((p->op==BIC || p->op==BIS) && equstr(regs[RT1], "$0")) {
+ if ((p->op==BIC || p->op==BIS) && equstr(regs[RT1], "#0")) {
if (p->forw->op!=CBR) {
p->back->forw = p->forw;
p->forw->back = p->back;
dest(regs[RT1], flt);
if (p->op==CLR && flt==0)
if ((r = isreg(regs[RT1])) >= 0)
- savereg(r, "$0");
+ savereg(r, "#0");
else
- setcon("$0", regs[RT1]);
+ setcon("#0", regs[RT1]);
ccloc[0] = 0;
continue;
source(regs[RT1]);
source(regs[RT2]);
if(p->op==BIT) {
- if (equstr(regs[RT1], "$-1") || equstr(regs[RT1], "$177777")) {
+ if (equstr(regs[RT1], "#-1") || equstr(regs[RT1], "#177777")) {
p->op = TST;
strcpy(regs[RT1], regs[RT2]);
regs[RT2][0] = 0;
p->code = copy(1, regs[RT1]);
nchange++;
nsaddr++;
- } else if (equstr(regs[RT2], "$-1") || equstr(regs[RT2], "$177777")) {
+ } else if (equstr(regs[RT2], "#-1") || equstr(regs[RT2], "#177777")) {
p->op = TST;
regs[RT2][0] = 0;
p->code = copy(1, regs[RT1]);
nchange++;
nsaddr++;
}
- if (equstr(regs[RT1], "$0")) {
+ if (equstr(regs[RT1], "#0")) {
p->op = TST;
regs[RT2][0] = 0;
p->code = copy(1, regs[RT1]);
nchange++;
nsaddr++;
- } else if (equstr(regs[RT2], "$0")) {
+ } else if (equstr(regs[RT2], "#0")) {
p->op = TST;
strcpy(regs[RT1], regs[RT2]);
regs[RT2][0] = 0;
if (p->back->op==TST || p->back->op==CMP) {
if (p->back->op==TST) {
singop(p->back);
- savereg(RT2, "$0");
+ savereg(RT2, "#0");
} else
dualop(p->back);
r = compare(p->subop, findcon(RT1), findcon(RT2));
while (*s) {
if ((*s=='(' && (*(s+1)!='r' || *(s+2)!='5')) || *s++=='*') {
for (i=0; i<NREG+NREG; i++) {
- if (regs[i][0] != '$')
+ if (regs[i][0] != '#')
regs[i][0] = 0;
conloc[0] = 0;
}
p1 = nonlab(p1);
if (p1->op==TST) {
singop(p1);
- savereg(RT2, "$0");
+ savereg(RT2, "#0");
} else if (p1->op==CMP)
dualop(p1);
else
register r;
p = regs[i];
- if (*p=='$')
+ if (*p=='#')
return(p);
if ((r = isreg(p)) >= 0)
return(regs[r]);
{
register unsigned n1, n2;
- if (*cp1++ != '$' || *cp2++ != '$')
+ if (*cp1++ != '#' || *cp2++ != '#')
return(-1);
n1 = 0;
while (*cp2 >= '0' && *cp2 <= '7') {
cl = ar2;
cv = ar1;
- if (*cv != '$')
+ if (*cv != '#')
return;
if (!natural(cl))
return;
/ call
cr100:
%a,n
+ .globl IA1
jsr pc,IA1
%n*,n
%al,1
F
- I $1,A1+
+ I #1,A1+
V A1
%el*,1
F1*
mov #1+2(R1),R+
mov #1(R1),R
- I $1,#1+2(R1)
+ I #1,#1+2(R1)
V #1(R1)
%nl*,1
F*
mov #1+2(R),-(sp)
mov #1(R),-(sp)
- I $1,#1+2(R)
+ I #1,#1+2(R)
V #1(R)
mov (sp)+,R
mov (sp)+,R+
FS*
S
mov R,*(sp)
- add $2,(sp)
+ add #2,(sp)
mov R+,*(sp)+
/ field assign, value in reg.
SS
FS
jsr pc,I
- add $10,sp
+ add #10,sp
/ =*, =/, =rem for longs
/ Operands of the form &x op y, so stack space is known.
SS
FS
jsr pc,I
- add $6,sp
+ add #6,sp
/ convert integer to character (sign extend)
cr109:
mov (R),R
ashc (sp)+,R
mov R,*(sp)
- add $2,(sp)
+ add #2,(sp)
mov R+,*(sp)+
/ field = ...
%al,c
%al,au
- /bit $0,A1
+ /bit #0,A1
/X0
bit A2,A1+
X1
%nl*,c
%nl*,au
F*
- /bit $0,#2(R)
+ /bit #0,#2(R)
/X0
bit A2,#2+2(R)
X1
%nl,c
%nl,au
F
- /bit $0,R
+ /bit #0,R
/X0
bit A2,R+
X1
--- /dev/null
+#!/bin/sh
+mkdir --parents ../../../tmp
+export APOUT_ROOT=`pwd`/../../..
+export PATH=`pwd`/../../../bin:`pwd`
+cc -S -O /usr/src/libc/stdio/filbuf.c