Annotation of researchv9/cmd/sun/c2/inst.c, revision 1.1

1.1     ! root        1: #ifndef lint
        !             2: static char sccsid[] = "@(#)inst.c 1.1 86/02/03 Copyr 1985 Sun Micro";
        !             3: #endif
        !             4: 
        !             5: /*
        !             6:  * Copyright (c) 1985 by Sun Microsystems, Inc.
        !             7:  */
        !             8: 
        !             9: 
        !            10: #include "as.h"
        !            11: #include "c2.h"
        !            12: 
        !            13: #if AS
        !            14: extern int no_op(), stop(), one_op(), ctrl_op(), move_op(), two_op(), jbrnch(),
        !            15:        cbrnch(), branch(), brnchs(), regmem(), shift_op(), reg_op(), postinc(),
        !            16:        bit_op(), memreg(), regbrnch(), exg_op(), addr_op(), link_op(),
        !            17:        movem_op(), movep_op(), moveq(), trap(), rts(), movec_op(), moves_op();
        !            18: #endif
        !            19: 
        !            20: #define I( a, b, c, d, e, f, g, h ) {a, b, c, d, e, f, g, h  },
        !            21: #define P( a, b, c, d, e ) {a, b, e, d, c },
        !            22: 
        !            23: #define A_ONE( a ) { a }
        !            24: #define A_TWO( a, b ) { a, b }
        !            25: #define A_TH3( a, b, c ) { a, b, c }
        !            26: #define A_4R( a, b, c, d ) { a, b, c, d }
        !            27: #define A_5V( a, b, c, d, e ) { a, b, c, d, e }
        !            28: #define A_6X( a, b, c, d, e, f ) { a, b, c, d, e, f }
        !            29: #define A_8T( a, b, c, d, e, f, g, h ) { a, b, c, d, e, f, g, h }
        !            30: 
        !            31: #define T_X     0
        !            32: #define T_ONE(a) (a)
        !            33: #define T_TWO(a,b) (((b)<<TOUCHWIDTH)|(a))
        !            34: #define T_THREE(a,b,c) (((((c)<<TOUCHWIDTH)|(b))<<TOUCHWIDTH)|(a))
        !            35: 
        !            36: /* List of 68000 op codes */
        !            37: struct ins_bkt op_codes[] = {
        !            38: 
        !            39: #   include "characteristics"
        !            40: 
        !            41:     0 };
        !            42: 
        !            43: d_ins()
        !            44: {
        !            45:        register struct ins_bkt *insp;
        !            46:        register struct ins_ptr *ipp;
        !            47:        register int save;
        !            48:        char *calloc();
        !            49: 
        !            50:        inst = (struct ins_ptr *) calloc( sizeof op_codes / sizeof op_codes[0], sizeof *inst);
        !            51:        if (inst == NULL) sys_error("could not allocate instruction symbol space ");
        !            52:        for ( ipp = &inst[0], insp = &op_codes[0]; insp->text_i; ipp++, insp++){
        !            53:                ipp->this_p = insp;
        !            54:                ipp->name_p = insp->text_i;
        !            55:                ipp->next_p = ins_hash_tab[save = hash(ipp->name_p)];
        !            56:                ins_hash_tab[save] = ipp;
        !            57:        }
        !            58: }
        !            59: 
        !            60: struct regdef{ char * name_r ; short regno_r; }  defregs[] = {
        !            61:   { "d0", D0REG+0 },
        !            62:   { "d1", D0REG+1 },
        !            63:   { "d2", D0REG+2 },
        !            64:   { "d3", D0REG+3 }, 
        !            65:   { "d4", D0REG+4 },
        !            66:   { "d5", D0REG+5 },
        !            67:   { "d6", D0REG+6 },
        !            68:   { "d7", D0REG+7 },
        !            69:   { "a0", A0REG+0 },
        !            70:   { "a1", A0REG+1 },
        !            71:   { "a2", A0REG+2 },
        !            72:   { "a3", A0REG+3 }, 
        !            73:   { "a4", A0REG+4 },
        !            74:   { "a5", A0REG+5 },
        !            75:   { "a6", A6REG   },
        !            76:   { "a7", A7REG   },
        !            77:   { "sp", A7REG   },
        !            78:   { "fp0", FP0REG+0 },
        !            79:   { "fp1", FP0REG+1 },
        !            80:   { "fp2", FP0REG+2 },
        !            81:   { "fp3", FP0REG+3 },
        !            82:   { "fp4", FP0REG+4 },
        !            83:   { "fp5", FP0REG+5 },
        !            84:   { "fp6", FP0REG+6 },
        !            85:   { "fp7", FP0REG+7 },
        !            86:   { "cc",  CCREG    },
        !            87:   /* fpcc */
        !            88:   { "pc",  PCREG    }, 
        !            89:   { "sr",  SRREG    },
        !            90:   { "usp", USPREG+0 },
        !            91:   { "sfc", USPREG+1 },
        !            92:   { "dfc", USPREG+2 },
        !            93:   { "vbr", USPREG+3 },
        !            94:   { "cacr",USPREG+4 }, 
        !            95:   { "caar",USPREG+5 },
        !            96:   { "msp", USPREG+6 },
        !            97:   { "isp", USPREG+7 },
        !            98:   { "fpc", FPCREG   },
        !            99:   { "fps", FPSREG   },
        !           100:   { "fpi", FPIREG   },
        !           101:   0, 0
        !           102: };
        !           103: 
        !           104: unsigned reg_access[] = {
        !           105: /*     d0       d1       d2       d3       d4       d5       d6       d7   */
        !           106:        AM_DREG, AM_DREG, AM_DREG, AM_DREG, AM_DREG, AM_DREG, AM_DREG, AM_DREG,
        !           107: /*     a0       a1       a2       a3       a4       a5       a6       a7   */
        !           108:        AM_AREG, AM_AREG, AM_AREG, AM_AREG, AM_AREG, AM_AREG, AM_AREG, AM_AREG,
        !           109: /*     fp0      fp1      fp2      fp3      fp4      fp5      fp6      fp7   */
        !           110:        AM_FREG, AM_FREG, AM_FREG, AM_FREG, AM_FREG, AM_FREG, AM_FREG, AM_FREG,
        !           111: /*     fpcc    */
        !           112:        0,
        !           113: /*      cc       pc       sr       usp                                      */
        !           114:        AM_CCREG,AM_PCREG,AM_CCREG,AM_USPREG|AM_CTRLREG,
        !           115: /*      src         dfc         vbr         cacr                            */
        !           116:        AM_CTRLREG, AM_CTRLREG, AM_CTRLREG, AM_CTRLREG, 
        !           117: /*      caar        msp         isp                                         */
        !           118:        AM_CTRLREG, AM_CTRLREG, AM_CTRLREG, 
        !           119: /*      fpc         fps          fpi                                       */
        !           120:        AM_FCTRLREG, AM_FCTRLREG, AM_FCTRLREG, 
        !           121: };
        !           122: 
        !           123: init_regs()
        !           124:   {    register struct sym_bkt *sbp;
        !           125:        register struct regdef *p = defregs;
        !           126:        register i;
        !           127: 
        !           128:        i = 0;
        !           129:        while (p->name_r) {
        !           130:          sbp = lookup(p->name_r);      /* Make a sym_bkt for it */
        !           131:          sbp->value_s = p->regno_r;    /* Load the sym_bkt */
        !           132:          sbp->csect_s = C_UNDEF;
        !           133:          sbp->attr_s = S_DEC | S_DEF | S_REG;
        !           134:          p++;
        !           135:          i++;
        !           136:        }
        !           137: }
        !           138: 
        !           139: #if C2
        !           140: struct def_builtin { char *bname; short ruse[4]; } def_builtins[] = {
        !           141:        "lmult",        LR+LW,  LR+LW,  0,      0,
        !           142:        "ulmult",       LR+LW,  LR+LW,  0,      0,
        !           143:        "ldivt",        LR+LW,  LR+LW,  0,      0,
        !           144:        "lmodt",        LR+LW,  LR+LW,  0,      0,
        !           145:        "uldivt",       LR+LW,  LR+LW,  0,      0,
        !           146:        "ulmodt",       LR+LW,  LR+LW,  0,      0,
        !           147:        "mcount",       0,      0,      LR,     0,
        !           148:        /* floating-point, too */
        !           149:        "Faddd",        LR+LW,  LR+LW,  LR+LW,  LW,     /* fvaddi */
        !           150:        "Fsubd",        LR+LW,  LR+LW,  LR+LW,  LW,     /* fvsubi */
        !           151:        "Fmuld",        LR+LW,  LR+LW,  LR+LW,  LW,     /* fvmuli */
        !           152:        "Fdivd",        LR+LW,  LR+LW,  LR+LW,  LW,     /* fvdivi */
        !           153:        "Fcmpd",        LR+LW,  LR+LW,  LR+LW,  LW,     /* fvcmpi */
        !           154:        "Fadds",        LR+LW,  LR+LW,  LW,     LW,     /* fvaddis */
        !           155:        "Fsubs",        LR+LW,  LR+LW,  LW,     LW,     /* fvsubis */
        !           156:        "Fmuls",        LR+LW,  LR+LW,  LW,     LW,     /* fvmulis */
        !           157:        "Fdivs",        LR+LW,  LR+LW,  LW,     LW,     /* fvdivis */
        !           158:        "Fcmps",        LR+LW,  LR+LW,  LW,     LW,     /* fvcmpis */
        !           159:        "Ffltd",        LR+LW,  LW,     LW,     LW,     /* fvflti */
        !           160:        "Fflts",        LR+LW,  LW,     LW,     LW,     /* fvfltis */
        !           161:        "Fintd",        LR+LW,  LR+LW,  LW,     LW,     /* fvfixi */
        !           162:        "Fints",        LR+LW,  LW,     LW,     LW,     /* fvfixis */
        !           163:        "Fstod",        LR+LW,  LW,     LW,     LW,     /* fvdoublei */
        !           164:        "Fdtos",        LR+LW,  LR+LW,  LW,     LW,     /* fvsinglei */
        !           165:        /* fortrash */
        !           166:        "Fcosd",        LR+LW,  LR+LW,  LW,     LW,     /* fvcosi */
        !           167:        "Fsind",        LR+LW,  LR+LW,  LW,     LW,     /* fvsini */
        !           168:        "Ftand",        LR+LW,  LR+LW,  LW,     LW,     /* fvtani */
        !           169:        "Facosd",       LR+LW,  LR+LW,  LW,     LW,     /* fvacosi */
        !           170:        "Fasind",       LR+LW,  LR+LW,  LW,     LW,     /* fvasini */
        !           171:        "Fatand",       LR+LW,  LR+LW,  LW,     LW,     /* fvatani */
        !           172:        "Fcoshd",       LR+LW,  LR+LW,  LW,     LW,     /* fvcoshi */
        !           173:        "Fsinhd",       LR+LW,  LR+LW,  LW,     LW,     /* fvsinhi */
        !           174:        "Ftanhd",       LR+LW,  LR+LW,  LW,     LW,     /* fvtanhi */
        !           175:        "Fexpd",        LR+LW,  LR+LW,  LW,     LW,     /* fvexpi */
        !           176:        "Fpow10d",      LR+LW,  LR+LW,  LW,     LW,     /* fv10toxi */
        !           177:        "Fpow2d",       LR+LW,  LR+LW,  LW,     LW,     /* fv2toxi */
        !           178:        "Flogd",        LR+LW,  LR+LW,  LW,     LW,     /* fvlogi */
        !           179:        "Flog10d",      LR+LW,  LR+LW,  LW,     LW,     /* fvlog10i */
        !           180:        "Flog2d",       LR+LW,  LR+LW,  LW,     LW,     /* fvlog2i */
        !           181:        "Fsqrd",        LR+LW,  LR+LW,  LW,     LW,     /* fvsqri */
        !           182:        "Fsqrtd",       LR+LW,  LR+LW,  LW,     LW,     /* fvsqrti */
        !           183:        "Faintd",       LR+LW,  LR+LW,  LW,     LW,     /* fvainti */
        !           184:        "Fanintd",      LR+LW,  LR+LW,  LW,     LW,     /* fvaninti */
        !           185:        "Fnintd",       LR+LW,  LR+LW,  LW,     LW,     /* fvninti */
        !           186:        "Fcoss",        LR+LW,  LW,     LW,     LW,     /* fvcosis */
        !           187:        "Fsins",        LR+LW,  LW,     LW,     LW,     /* fvsinis */
        !           188:        "Ftans",        LR+LW,  LW,     LW,     LW,     /* fvtanis */
        !           189:        "Facoss",       LR+LW,  LW,     LW,     LW,     /* fvacosis */
        !           190:        "Fasins",       LR+LW,  LW,     LW,     LW,     /* fvasinis */
        !           191:        "Fatans",       LR+LW,  LW,     LW,     LW,     /* fvatanis */
        !           192:        "Fcoshs",       LR+LW,  LW,     LW,     LW,     /* fvcoshis */
        !           193:        "Fsinhs",       LR+LW,  LW,     LW,     LW,     /* fvsinhis */
        !           194:        "Ftanhs",       LR+LW,  LW,     LW,     LW,     /* fvtanhis */
        !           195:        "Fexps",        LR+LW,  LW,     LW,     LW,     /* fvexpis */
        !           196:        "Fpow10s",      LR+LW,  LW,     LW,     LW,     /* fv10toxis */
        !           197:        "Fpow2s",       LR+LW,  LW,     LW,     LW,     /* fv2toxis */
        !           198:        "Flogs",        LR+LW,  LW,     LW,     LW,     /* fvlogis */
        !           199:        "Flog10s",      LR+LW,  LW,     LW,     LW,     /* fvlog10is */
        !           200:        "Flog2s",       LR+LW,  LW,     LW,     LW,     /* fvlog2is */
        !           201:        "Fsqrs",        LR+LW,  LW,     LW,     LW,     /* fvsqris */
        !           202:        "Fsqrts",       LR+LW,  LW,     LW,     LW,     /* fvsqrtis */
        !           203:        "Faints",       LR+LW,  LW,     LW,     LW,     /* fvaintis */
        !           204:        "Fanints",      LR+LW,  LW,     LW,     LW,     /* fvanintis */
        !           205:        "Fnints",       LR+LW,  LW,     LW,     LW,     /* fvnintis */
        !           206:        0
        !           207: };
        !           208: 
        !           209: static void
        !           210: add_builtin(d)
        !           211:     register struct def_builtin * d;
        !           212: {
        !           213:     register i;
        !           214:     register struct sym_bkt *s;
        !           215: 
        !           216:     s = lookup(d->bname);
        !           217:     s->csect_s = C_UNDEF;
        !           218:     s->attr_s = S_DEC | S_CRT;
        !           219:     for (i=0; i < sizeof d->ruse / sizeof d->ruse[0] ; i++){
        !           220:        s->builtin_s[i] = d->ruse[i];
        !           221:     }
        !           222: }
        !           223: 
        !           224: void
        !           225: init_builtins()
        !           226: {
        !           227:     register struct def_builtin * d;
        !           228: 
        !           229:     for (d = def_builtins; d->bname != NULL; d++){
        !           230:        if (d->bname[0] == 'F') {
        !           231:            /* must make a copy for each flavor of floating point. BLEAGH! */
        !           232:            add_builtin(d);
        !           233:            d->bname[0] = 'V';  /* vectored */
        !           234:            add_builtin(d);
        !           235:            d->bname[0] = 'S';  /* sky */
        !           236:            add_builtin(d);
        !           237:            d->bname[0] = 'M';  /* motorola */
        !           238:            add_builtin(d);
        !           239:            d->bname[0] = 'W';  /* Weitek */
        !           240:            add_builtin(d);
        !           241:        } else {
        !           242:            add_builtin(d);
        !           243:        }
        !           244:     }
        !           245: }
        !           246: #endif

unix.superglobalmegacorp.com

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