|
|
1.1 ! root 1: # include "mfile2.h" ! 2: extern int Pflag, bbcnt; ! 3: /* a lot of the machine dependent parts of the second pass */ ! 4: ! 5: char * ! 6: rnames[]= { /* keyed to register number tokens */ ! 7: ! 8: "r0", "r1", ! 9: "r2", "r3", "r4", ! 10: "r5", "r6", "r7", "r8", "r9", "r10", "r11", ! 11: "ap", "fp", "sp", "pc" ! 12: }; ! 13: ! 14: eobl2() /* end of function stuff */ ! 15: { ! 16: } ! 17: ! 18: char * ! 19: exname( ix ) ! 20: char *ix; ! 21: { ! 22: /* make a name look like an external name in the local machine */ ! 23: ! 24: static char text[100] = "_"; ! 25: ! 26: if( ix == NULL ) cerror("no name in exname"); ! 27: strcpy(text+1, ix); ! 28: return( text ); ! 29: } ! 30: ! 31: lineid( l, fn ) ! 32: int l; ! 33: char *fn; ! 34: { ! 35: /* identify line l and file fn */ ! 36: printx( "# line %d, file %s\n", l, fn ); ! 37: } ! 38: ! 39: deflab( n ) ! 40: int n; ! 41: { ! 42: printx( "L%d:\n", n ); ! 43: } ! 44: ! 45: ! 46: genubr( n ) ! 47: int n; ! 48: { ! 49: /* output a branch to label n */ ! 50: printx( "\tjbr\tL%d\n", n ); ! 51: if(Pflag) ! 52: printx("#jmp L%d\n", n); ! 53: } ! 54: genret( s, l, n ) ! 55: int s, l, n; ! 56: { ! 57: /* a return: s nonzero means a structure returned */ ! 58: /* n has the value of "retlab", a common spot for returns */ ! 59: deflab(n); ! 60: if( s ) printx( "\tmovab\tL%d,r0\n", l ); ! 61: if(Pflag) { ! 62: printx("#ret %d\n", ++bbcnt); ! 63: printx("\tincl\tlocprof+%d\n", 4*(bbcnt+3)); ! 64: } ! 65: dbfunret(); ! 66: printx( "\tret\n" ); ! 67: } ! 68: ! 69: defalign(n) ! 70: int n; ! 71: { ! 72: /* cause the alignment to become a multiple of n bits */ ! 73: if( n % SZCHAR ) cerror( "funny alignment: %d", n ); ! 74: else n /= SZCHAR; ! 75: if( n == 1 ) return; ! 76: else if( n==2 ) n=1; ! 77: else if( n==4 ) n=2; ! 78: else cerror( "funny alignment: %d", n ); ! 79: printx( "\t.align\t%d\n", n ); ! 80: } ! 81: ! 82: char *locnames[] = { ! 83: /* location counter names for PROG, DATA, ADATA, ISTRNG, STRNG */ ! 84: " .text\n", ! 85: " .data\n", ! 86: " .data\n", ! 87: " .data 2\n", ! 88: " .data 1\n", ! 89: }; ! 90: ! 91: bycode( t, i ) ! 92: int t, i; ! 93: { ! 94: /* put byte i+1 in a string */ ! 95: ! 96: if ( t < 0 ) { /* end of the string */ ! 97: printx("\n"); ! 98: } else { /* stash byte t into string */ ! 99: if( (i&7) == 0 ) printx( "\n .byte " ); ! 100: else printx(","); ! 101: printx("0x%x", t); ! 102: } ! 103: } ! 104: ! 105: genshort( s ) ! 106: short s; ! 107: { ! 108: /* write out a short value */ ! 109: printx( " .short %d\n", (short) s ); ! 110: } ! 111: ! 112: genlong( l ) ! 113: long l; ! 114: { ! 115: /* write out a long initializer */ ! 116: printx( " .long 0x%lx\n", l ); ! 117: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.