Annotation of coherent/b/bin/c/n2/i8086/getcod.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * The routines in this file
                      3:  * read in code from the intermediate file.
                      4:  * It is almost machine independent but it has been
                      5:  * broken out just in case a strange machine creeps
                      6:  * along.
                      7:  */
                      8: #ifdef   vax
                      9: #include "INC$LIB:cc2.h"
                     10: #else
                     11: #include "cc2.h"
                     12: #endif
                     13: 
                     14: /*
                     15:  * Read in a code item.
                     16:  * Return a pointer to a filled in
                     17:  * INS node.
                     18:  */
                     19: INS *
                     20: getcode()
                     21: {
                     22:        register INS    *ip;
                     23:        register OPINFO *opp;
                     24:        register int    i;
                     25:        register int    opcode;
                     26: 
                     27:        opcode = bget();
                     28:        opp = &opinfo[opcode];
                     29:        if (opp->op_style == OF_LPTR) {
                     30:                if (iget() != (A_LID|A_DIR))
                     31:                        cbotch("lptr");
                     32:                ip = newi(sizeof(INS));
                     33:                ip->i_type = LLLINK;
                     34:                ip->i_fp = NULL;
                     35:                ip->i_bp = NULL;
                     36:                ip->i_labno = iget();
                     37:                ip->i_sp = NULL;
                     38:                ip->i_ip = NULL;
                     39:                return (ip);
                     40:        }
                     41:        if ((opp->op_flag&OP_JUMP) != 0) {
                     42:                if (iget() != (A_LID|A_DIR))
                     43:                        cbotch("jump");
                     44:                ip = newi(sizeof(INS));
                     45:                ip->i_type = JUMP;
                     46:                ip->i_long = 0;
                     47:                ip->i_rel = opcode;
                     48:                ip->i_fp = NULL;
                     49:                ip->i_bp = NULL;
                     50:                ip->i_labno = iget();
                     51:                ip->i_sp = NULL;
                     52:                ip->i_ip = NULL;
                     53:                return (ip);
                     54:        }
                     55:        ip = newn(opp->op_naddr);
                     56:        ip->i_type = CODE;
                     57:        ip->i_fp = NULL;
                     58:        ip->i_bp = NULL;
                     59:        for (i=0; i<opp->op_naddr; ++i)
                     60:                getfield(opcode, &ip->i_af[i]);
                     61:        ip->i_op = opcode;
                     62:        ip->i_naddr = opp->op_naddr;
                     63:        return (ip);
                     64: }
                     65: 
                     66: /*
                     67:  * This routine reads in an AUTOS item
                     68:  * that appears in a function body. All it does is
                     69:  * read the size of the stack frame into the global cell
                     70:  * `framesize', which is used by `genprolog' to put out
                     71:  * the function prolog. The register field of the AUTOS
                     72:  * item (the second ival_t) is thrown away.
                     73:  */
                     74: getautos()
                     75: {
                     76:        framesize = iget();
                     77:        iget();
                     78: }

unix.superglobalmegacorp.com

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