Annotation of researchv10no/cmd/ccom/vax/lcatch2.c, revision 1.1

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:        /* only used in catch2.c */
        !             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[256] = "_";    /* shit for style */
        !            25: 
        !            26:        if( ix == NULL ) cerror("no name in exname");
        !            27:        strncpy(text+1, ix, sizeof(text)-2);
        !            28:        if(strlen(ix) > sizeof(text)-2)
        !            29:                cerror("buffer too short in exname");
        !            30:        return( text );
        !            31: }
        !            32: 
        !            33: lineid( l, fn )
        !            34: int l;
        !            35: char *fn;
        !            36: {
        !            37:        /* identify line l and file fn */
        !            38:        printx( "#      line %d, file %s\n", l, fn );
        !            39: }
        !            40: 
        !            41: deflab( n )    /* cgram.y, local.c, trees.c */
        !            42: int n;
        !            43: {
        !            44:        printx( "L%d:\n", n );
        !            45: }
        !            46: 
        !            47: 
        !            48: genubr( n )    /* only used in local.c */
        !            49: int n;
        !            50: {
        !            51:        /* output a branch to label n */
        !            52:        printx( "\tjbr\tL%d\n", n );
        !            53:        if(Pflag)
        !            54:                printx("#jmp L%d\n", n);
        !            55: }
        !            56: genret( s, l, n )      /* only used in local.c! */
        !            57: int s, l, n;
        !            58: {
        !            59:        /* a return: s nonzero means a structure returned */
        !            60:        /* n has the value of "retlab", a common spot for returns */
        !            61:        deflab(n);
        !            62:        if( s ) printx( "\tmovab\tL%d,r0\n", l );
        !            63:        if(Pflag) {
        !            64:                printx("#ret %d\n", ++bbcnt);
        !            65:                printx("\tincl\tlocprof+%d\n", 4*(bbcnt+3));
        !            66:        }
        !            67:        dbfunret();
        !            68:        printx( "\tret\n" );
        !            69: }
        !            70: 
        !            71: defalign(n)    /* used only in pftn.c */
        !            72: int n;
        !            73: {
        !            74:        /* cause the alignment to become a multiple of n bits */
        !            75:        if( n % SZCHAR ) cerror( "funny alignment: %d", n );
        !            76:        else n /= SZCHAR;
        !            77:        if( n == 1 ) return;
        !            78:        else if( n==2 ) n=1;
        !            79:        else if( n==4 ) n=2;
        !            80:        else cerror( "funny alignment: %d", n );
        !            81:        printx( "\t.align\t%d\n", n );
        !            82: }
        !            83: 
        !            84: char *locnames[] = {   /* only used in trees.c */
        !            85:        /* location counter names for PROG, DATA, ADATA, ISTRNG, STRNG */
        !            86:        "       .text\n",
        !            87:        "       .data\n",
        !            88:        "       .data\n",
        !            89:        "       .data   2\n",
        !            90:        "       .data   1\n",
        !            91:        };
        !            92: 
        !            93: bycode( t, i ) /* this is used only in scan.c!! (second pass stuff?) */
        !            94: int t, i;
        !            95: {
        !            96:        /* put byte i+1 in a string */
        !            97: 
        !            98:        if ( t < 0 ) { /* end of the string */
        !            99:                printx("\n");
        !           100:        } else { /* stash byte t into string */
        !           101:                if( (i&7) == 0 ) printx( "\n    .byte   " );
        !           102:                else printx(",");
        !           103:                printx("0x%x", t);
        !           104:        }
        !           105: }
        !           106: 
        !           107: genlong(l)     /* only in local.c */
        !           108: long l;
        !           109: {
        !           110:        /* write out a long initializer */
        !           111:        printx("\t.long\t0x%lx\n", l);
        !           112: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.