SCCS-vsn: old/pcc/ccom.tahoe/code.c 1.3
SCCS-vsn: old/pcc/ccom.tahoe/local.c 1.3
SCCS-vsn: old/pcc/ccom.tahoe/local2.c 1.5
-static char sccsid[] = "@(#)code.c 1.2 (Berkeley) %G%";
+static char sccsid[] = "@(#)code.c 1.3 (Berkeley) %G%";
#endif
# include "pass1.h"
#endif
# include "pass1.h"
# include <a.out.h>
# include <stab.h>
# include <a.out.h>
# include <stab.h>
+# define putstr(s) fputs((s), stdout)
+
int proflg = 0; /* are we generating profiling code? */
int strftn = 0; /* is the current function one which returns a value */
int gdebug;
int proflg = 0; /* are we generating profiling code? */
int strftn = 0; /* is the current function one which returns a value */
int gdebug;
psline();
break;
case DATA:
case ADATA:
psline();
break;
case DATA:
case ADATA:
- printf( " .data 1\n" );
+ putstr( " .data 1\n" );
- printf( " .data 2\n" );
+ putstr( " .data 2\n" );
i = getlab(); /* label for return area */
#ifndef LCOMM
i = getlab(); /* label for return area */
#ifndef LCOMM
- printf(" .data\n" );
- printf(" .align 2\n" );
+ putstr(" .data\n" );
+ putstr(" .align 2\n" );
printf("L%d: .space %d\n", i, tsize(t, p->dimoff, p->sizoff)/SZCHAR );
printf("L%d: .space %d\n", i, tsize(t, p->dimoff, p->sizoff)/SZCHAR );
#else
{ int sz = tsize(t, p->dimoff, p->sizoff) / SZCHAR;
if (sz % (SZINT/SZCHAR))
#else
{ int sz = tsize(t, p->dimoff, p->sizoff) / SZCHAR;
if (sz % (SZINT/SZCHAR))
locctr( PROG );
p = &stab[curftn];
locctr( PROG );
p = &stab[curftn];
- printf( " .align 1\n");
+ putstr( " .align 1\n");
defnam( p );
temp = p->stype;
temp = DECREF(temp);
defnam( p );
temp = p->stype;
temp = DECREF(temp);
if( proflg ) { /* profile code */
i = getlab();
printf(" pushl $L%d\n", i);
if( proflg ) { /* profile code */
i = getlab();
printf(" pushl $L%d\n", i);
- printf(" callf $8,mcount\n");
- printf(" .data\n");
- printf(" .align 2\n");
+ putstr(" callf $8,mcount\n");
+ putstr(" .data\n");
+ putstr(" .align 2\n");
printf("L%d: .long 0\n", i);
printf("L%d: .long 0\n", i);
#ifdef REG_CHAR
printf( " %s", toreg(p->stype)) );
#else
#ifdef REG_CHAR
printf( " %s", toreg(p->stype)) );
#else
#endif
printf( " %d(fp),%s\n", p->offset/SZCHAR, rname(temp) );
p->offset = temp; /* remember register number */
#endif
printf( " %d(fp),%s\n", p->offset/SZCHAR, rname(temp) );
p->offset = temp; /* remember register number */
- if ( i != 0 ) printf( "\"\n" );
+ if ( i != 0 ) putstr( "\"\n" );
- if ( i == 0 ) printf("\t.ascii\t\"");
+ if ( i == 0 ) putstr("\t.ascii\t\"");
if ( t == '\\' || t == '"'){
lastoctal = 0;
printf("\\%c", t);
if ( t == '\\' || t == '"'){
lastoctal = 0;
printf("\\%c", t);
lastoctal = 0;
putchar(t);
}
lastoctal = 0;
putchar(t);
}
- if ( i == 077 ) printf("\"\n");
+ if ( i == 077 ) putstr("\"\n");
}
#else
i &= 07;
if( t < 0 ){ /* end of the string */
}
#else
i &= 07;
if( t < 0 ){ /* end of the string */
- if( i != 0 ) printf( "\n" );
+ if( i != 0 ) putchar( '\n' );
}
else { /* stash byte t into string */
}
else { /* stash byte t into string */
- if( i == 0 ) printf( " .byte " );
- else printf( "," );
+ if( i == 0 ) putstr( " .byte " );
+ else putchar( ',' );
- if( i == 07 ) printf( "\n" );
+ if( i == 07 ) putchar( '\n' );
dlab = p->slab >= 0 ? p->slab : getlab();
/* already in r0 */
dlab = p->slab >= 0 ? p->slab : getlab();
/* already in r0 */
- printf( " casel r0,$" );
+ putstr( " casel r0,$" );
printf( CONFMT, p[1].sval );
printf( CONFMT, p[1].sval );
printf( CONFMT, range);
printf("\n .align 1\nL%d:\n", swlab);
for( i=1,j=p[1].sval; i<=n; j++) {
printf( CONFMT, range);
printf("\n .align 1\nL%d:\n", swlab);
for( i=1,j=p[1].sval; i<=n; j++) {
for( i=1; i<=n; ++i ){
/* already in r0 */
for( i=1; i<=n; ++i ){
/* already in r0 */
- printf( " cmpl r0,$" );
+ putstr( " cmpl r0,$" );
printf( CONFMT, p[i].sval );
printf( "\n jeql L%d\n", p[i].slab );
}
printf( CONFMT, p[i].sval );
printf( "\n jeql L%d\n", p[i].slab );
}
if( start > limit ) return;
if( start > limit ) return;
- printf( " cmpl r0,$" );
+ putstr( " cmpl r0,$" );
printf( CONFMT, heapsw[start].sval);
printf("\n jeql L%d\n", heapsw[start].slab);
if( (2*start) > limit ) {
printf( CONFMT, heapsw[start].sval);
printf("\n jeql L%d\n", heapsw[start].slab);
if( (2*start) > limit ) {
-static char sccsid[] = "@(#)local.c 1.2 (Berkeley) %G%";
+static char sccsid[] = "@(#)local.c 1.3 (Berkeley) %G%";
#endif
# include "pass1.h"
#endif
# include "pass1.h"
q = &stab[id];
printf( " .comm %s,", exname( q->sname ) );
off = tsize( q->stype, q->dimoff, q->sizoff );
q = &stab[id];
printf( " .comm %s,", exname( q->sname ) );
off = tsize( q->stype, q->dimoff, q->sizoff );
- printf( "%d" /*CONFMT*/, off/SZCHAR );
- printf( "\n" );
+ printf( "%d\n" /*CONFMT*/, off/SZCHAR );
-static char sccsid[] = "@(#)local2.c 1.4 (Berkeley) %G%";
+static char sccsid[] = "@(#)local2.c 1.5 (Berkeley) %G%";
#endif
# include "pass2.h"
# include <ctype.h>
#endif
# include "pass2.h"
# include <ctype.h>
+
+# define putstr(s) fputs((s), stdout)
+
# ifdef FORT
int ftlab1, ftlab2;
# endif
# ifdef FORT
int ftlab1, ftlab2;
# endif
return;
case INT:
case UNSIGNED:
return;
case INT:
case UNSIGNED:
return;
case SHORT:
case USHORT:
return;
case SHORT:
case USHORT:
return;
case CHAR:
case UCHAR:
return;
case CHAR:
case UCHAR:
return;
default:
if ( !ISPTR( n->in.type ) ) cerror("zzzcode- bad type");
else {
return;
default:
if ( !ISPTR( n->in.type ) ) cerror("zzzcode- bad type");
else {
if (r->in.op == ICON)
if(r->in.name[0] == '\0') {
if (r->tn.lval == 0) {
if (r->in.op == ICON)
if(r->in.name[0] == '\0') {
if (r->tn.lval == 0) {
adrput(l);
return;
}
if (r->tn.lval < 0 && r->tn.lval >= -63) {
adrput(l);
return;
}
if (r->tn.lval < 0 && r->tn.lval >= -63) {
prtype(l);
r->tn.lval = -r->tn.lval;
goto ops;
}
#ifdef MOVAFASTER
} else {
prtype(l);
r->tn.lval = -r->tn.lval;
goto ops;
}
#ifdef MOVAFASTER
} else {
- printf("movab");
- printf(" ");
adrput(l);
return;
#endif MOVAFASTER
adrput(l);
return;
#endif MOVAFASTER
if (l->in.op == REG) {
if( tlen(l) < tlen(r) ) {
if (l->in.op == REG) {
if( tlen(l) < tlen(r) ) {
- !ISUNSIGNED(l->in.type)?
- printf("cvt"):
- printf("movz");
+ putstr(!ISUNSIGNED(l->in.type)?
+ "cvt": "movz");
goto ops;
} else
l->in.type = INT;
}
if (tlen(l) == tlen(r)) {
goto ops;
} else
l->in.type = INT;
}
if (tlen(l) == tlen(r)) {
prtype(l);
goto ops;
} else if (tlen(l) > tlen(r) && ISUNSIGNED(r->in.type))
prtype(l);
goto ops;
} else if (tlen(l) > tlen(r) && ISUNSIGNED(r->in.type))
prtype(r);
prtype(l);
ops:
prtype(r);
prtype(l);
ops:
if (xdebug) eprint(p, 0, &val, &val);
r = p->in.right;
if( tlen(r) == sizeof(int) && r->in.type != FLOAT )
if (xdebug) eprint(p, 0, &val, &val);
r = p->in.right;
if( tlen(r) == sizeof(int) && r->in.type != FLOAT )
- printf(ISUNSIGNED(r->in.type) ? "movz" : "cvt");
+ putstr(ISUNSIGNED(r->in.type) ? "movz" : "cvt");
case 'D': /* INCR and DECR */
zzzcode(p->in.left, 'A');
case 'D': /* INCR and DECR */
zzzcode(p->in.left, 'A');
case 'E': /* INCR and DECR, FOREFF */
if (p->in.right->tn.lval == 1)
{
case 'E': /* INCR and DECR, FOREFF */
if (p->in.right->tn.lval == 1)
{
- printf("%s", (p->in.op == INCR ? "inc" : "dec") );
+ putstr(p->in.op == INCR ? "inc" : "dec");
adrput(p->in.left);
return;
}
adrput(p->in.left);
return;
}
- printf("%s", (p->in.op == INCR ? "add" : "sub") );
+ putstr(p->in.op == INCR ? "add" : "sub");
adrput(p->in.left);
return;
adrput(p->in.left);
return;
case 'H': /* opcode for shift */
if(p->in.op == LS || p->in.op == ASG LS)
case 'H': /* opcode for shift */
if(p->in.op == LS || p->in.op == ASG LS)
else if(ISUNSIGNED(p->in.left->in.type))
else if(ISUNSIGNED(p->in.left->in.type))
return;
case 'L': /* type of left operand */
return;
case 'L': /* type of left operand */
}
#define MOVB(dst, src, off) { \
}
#define MOVB(dst, src, off) { \
- printf("\tmovb\t"); upput(src, off); putchar(','); \
+ putstr("\tmovb\t"); upput(src, off); putchar(','); \
upput(dst, off); putchar('\n'); \
}
#define MOVW(dst, src, off) { \
upput(dst, off); putchar('\n'); \
}
#define MOVW(dst, src, off) { \
- printf("\tmovw\t"); upput(src, off); putchar(','); \
+ putstr("\tmovw\t"); upput(src, off); putchar(','); \
upput(dst, off); putchar('\n'); \
}
#define MOVL(dst, src, off) { \
upput(dst, off); putchar('\n'); \
}
#define MOVL(dst, src, off) { \
- printf("\tmovl\t"); upput(src, off); putchar(','); \
+ putstr("\tmovl\t"); upput(src, off); putchar(','); \
upput(dst, off); putchar('\n'); \
}
/*
upput(dst, off); putchar('\n'); \
}
/*
werror("optimized structure assignment (size %d alignment %d)", size, p->stn.stalign);
break;
case 2:
if (p->stn.stalign != 2) {
MOVB(l, r, SZCHAR);
werror("optimized structure assignment (size %d alignment %d)", size, p->stn.stalign);
break;
case 2:
if (p->stn.stalign != 2) {
MOVB(l, r, SZCHAR);
MOVB(l, r, 3*SZCHAR);
MOVB(l, r, 2*SZCHAR);
MOVB(l, r, 1*SZCHAR);
MOVB(l, r, 3*SZCHAR);
MOVB(l, r, 2*SZCHAR);
MOVB(l, r, 1*SZCHAR);
} else {
MOVW(l, r, SZSHORT);
} else {
MOVW(l, r, SZSHORT);
goto movblk;
MOVW(l, r, 2*SZSHORT);
MOVW(l, r, 1*SZSHORT);
goto movblk;
MOVW(l, r, 2*SZSHORT);
MOVW(l, r, 1*SZSHORT);
goto optimized;
case 8:
if (p->stn.stalign == 4) {
MOVL(l, r, SZLONG);
goto optimized;
case 8:
if (p->stn.stalign == 4) {
MOVL(l, r, SZLONG);
goto optimized;
}
/* fall thru...*/
goto optimized;
}
/* fall thru...*/
/*
* Can we ever get a register conflict with R1 here?
*/
/*
* Can we ever get a register conflict with R1 here?
*/
- printf(",r1\n\tmovab\t");
+ putstr(",r1\n\tmovab\t");
adrput(r);
printf(",r0\n\tmovl\t$%d,r2\n\tmovblk\n", size);
rname(R2);
adrput(r);
printf(",r0\n\tmovl\t$%d,r2\n\tmovblk\n", size);
rname(R2);
case REG:
if (size == SZLONG) {
case REG:
if (size == SZLONG) {
- printf("%s", rname(p->tn.rval+1));
+ putstr(rname(p->tn.rval+1));
break;
}
/* fall thru... */
break;
}
/* fall thru... */
- printf( "%s", rname(p->tn.rval) );
+ putstr(rname(p->tn.rval));
case ICON:
/* addressable value of the constant */
case ICON:
/* addressable value of the constant */
acon( p );
return;
case REG:
acon( p );
return;
case REG:
- printf( "%s", rname(p->tn.rval) );
+ putstr(rname(p->tn.rval));
if(p->in.type == DOUBLE) /* for entry mask */
(void) rname(p->tn.rval+1);
return;
if(p->in.type == DOUBLE) /* for entry mask */
(void) rname(p->tn.rval+1);
return;
register int flags;
flags = R2UPK3(r);
register int flags;
flags = R2UPK3(r);
- if( flags & 1 ) printf("*");
+ if( flags & 1 ) putchar('*');
if( p->tn.lval != 0 || p->in.name[0] != '\0' ) acon(p);
if( R2UPK1(r) != 100) printf( "(%s)", rname(R2UPK1(r)) );
printf( "[%s]", rname(R2UPK2(r)) );
if( p->tn.lval != 0 || p->in.name[0] != '\0' ) acon(p);
if( R2UPK1(r) != 100) printf( "(%s)", rname(R2UPK1(r)) );
printf( "[%s]", rname(R2UPK2(r)) );
if( r == FP && p->tn.lval > 0 ){ /* in the argument region */
if( p->in.name[0] != '\0' ) werror( "bad arg temp" );
printf( CONFMT, p->tn.lval );
if( r == FP && p->tn.lval > 0 ){ /* in the argument region */
if( p->in.name[0] != '\0' ) werror( "bad arg temp" );
printf( CONFMT, p->tn.lval );
return;
}
if( p->tn.lval != 0 || p->in.name[0] != '\0') acon( p );
return;
}
if( p->tn.lval != 0 || p->in.name[0] != '\0') acon( p );
case UNARY MUL:
/* STARNM or STARREG found */
if( tshape(p, STARNM) ) {
case UNARY MUL:
/* STARNM or STARREG found */
if( tshape(p, STARNM) ) {
adrput( p->in.left);
}
return;
adrput( p->in.left);
}
return;
if( p->in.name[0] == '\0' ){
printf( CONFMT, p->tn.lval);
if( p->in.name[0] == '\0' ){
printf( CONFMT, p->tn.lval);
- }
- else if( p->tn.lval == 0 ) {
#ifndef FLEXNAMES
printf( "%.8s", p->in.name );
#else
#ifndef FLEXNAMES
printf( "%.8s", p->in.name );
#else
- printf( "%s", p->in.name );
+ if (p->tn.lval != 0) {
+ putchar('+');
+ printf(CONFMT, p->tn.lval);
- else {
-#ifndef FLEXNAMES
- printf( "%.8s+", p->in.name );
-#else
- printf( "%s+", p->in.name );
-#endif
- printf( CONFMT, p->tn.lval );
- }
}
genscall( p, cookie ) register NODE *p; {
}
genscall( p, cookie ) register NODE *p; {