Annotation of researchv9/cmd/sun/as/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: 
        !            12: #if AS
        !            13: extern int no_op(), stop(), one_op(), ctrl_op(), two_op(), 
        !            14:        jbrnch_op(), cbrnch_op(), branch_op(), brnchs_op(),
        !            15:        regmem_op(), shift_op(), reg_op(), postinc(), quick_op(),
        !            16:        bit_op(), memreg_op(), exg_op(), addr_op(), link_op(),
        !            17:        move_op(), movem_op(), movep_op(), moveq_op(), movec_op(), moves_op(),
        !            18:        trap(), rts_op(), lea_op(); 
        !            19: extern int chk2_op(), div_op(), callm_op(), bitf_op(), bitfr_op(),
        !            20:        cas1_op(), cas2_op(), brnchl_op(),pack_op();
        !            21: extern int ascii_op(), byteword(), comm_op(), ctrl_op(), csect_op(), 
        !            22:            proc_op(), globl_op();
        !            23: extern int even_op(), skip_op(), stab_op(), float_op(), cpid_op() ;
        !            24: extern int cp_general(), cp_move(), cp_regpair(), cp_movecr(), cp_movem() ;
        !            25: extern int cp_oneop(), cp_conditional(), cp_branch(), cp_oneword() ;
        !            26: 
        !            27: #define I( a, b, c, d, e, f, g, h, i ) { a, b, c, d, e, 1, f, g, h, i },
        !            28: #define P( a, b, c, d, e, f, g, h ) { a, b, c, d, e, f, 0, {g}, h },
        !            29: 
        !            30: #define A_ONE( a ) { a }
        !            31: #define A_TWO( a, b ) { a, b }
        !            32: #define A_TH3( a, b, c ) { a, b, c }
        !            33: #define A_4R( a, b, c, d ) { a, b, c, d }
        !            34: #define A_5V( a, b, c, d, e ) { a, b, c, d, e }
        !            35: #define A_6X( a, b, c, d, e, f ) { a, b, c, d, e, f }
        !            36: #define A_SEVEN( a, b, c, d, e, f, g ) { a, b, c, d, e, f, g }
        !            37: #define A_EIGHT( a, b, c, d, e, f, g, h ) { a, b, c, d, e, f, g, h }
        !            38: 
        !            39: #define T_X    0
        !            40: #define T_ONE(a) (((a)<<TOUCHWIDTH)<<TOUCHWIDTH)
        !            41: #define T_TWO(a,b) ((((a)<<TOUCHWIDTH)|(b))<<TOUCHWIDTH)
        !            42: #define T_THREE(a,b,c) (((((a)<<TOUCHWIDTH)|(b))<<TOUCHWIDTH)|(c))
        !            43: 
        !            44: #define ASCII  ascii_op
        !            45: #define BIT    bit_op
        !            46: #define BITF   bitf_op
        !            47: #define BITFR  bitfr_op
        !            48: #define BRANCH branch_op
        !            49: #define BRNCHS brnchs_op
        !            50: #define BRNCHL brnchl_op
        !            51: #define BYTE   byteword
        !            52: #define CALLM  callm_op
        !            53: #define CAS1   cas1_op
        !            54: #define CAS2   cas2_op
        !            55: #define CBRNCH cbrnch_op
        !            56: #define CHK2   chk2_op
        !            57: #define COMM   comm_op
        !            58: #define CPID   cpid_op
        !            59: #define CTRL   ctrl_op
        !            60: #define DATA   csect_op
        !            61: #define DIV_OP div_op
        !            62: #define DBRA   branch_op
        !            63: #define EVEN   even_op
        !            64: #define EXG    exg_op
        !            65: #define EXIT   rts_op
        !            66: #define FLOAT  float_op
        !            67: #define PROC   proc_op
        !            68: #define GLOBL  globl_op
        !            69: #define JBRNCH jbrnch_op
        !            70: #define LEA    lea_op
        !            71: #define LINK   link_op
        !            72: #define MEMREG memreg_op
        !            73: #define MOVE   move_op
        !            74: #define MOVEC  movec_op
        !            75: #define MOVEM  movem_op
        !            76: #define MOVEP  movep_op
        !            77: #define MOVEQ  moveq_op
        !            78: #define MOVS   moves_op
        !            79: #define NO     no_op
        !            80: #define ONE_OP one_op
        !            81: #define PACK   pack_op
        !            82: #define POSTINC        postinc
        !            83: #define QUICK  quick_op
        !            84: #define REG_OP reg_op
        !            85: #define REGMEM regmem_op
        !            86: #define RTS    rts_op
        !            87: #define SHIFT_OP       shift_op
        !            88: #define SKIP   skip_op
        !            89: #define STAB   stab_op
        !            90: #define STOP   stop
        !            91: #define TRAP   trap
        !            92: #define TWO_OP two_op
        !            93: #endif
        !            94: 
        !            95: /* List of 68000 op codes */
        !            96: struct ins_bkt op_codes[] = {
        !            97: 
        !            98: #if C2
        !            99: #   include "characteristics"
        !           100: #else 
        !           101: #if AS
        !           102: #   include "as_charac"
        !           103: #else
        !           104: #include "NO FLAVOR"
        !           105: #endif
        !           106: #endif
        !           107: 
        !           108:     0 };
        !           109: 
        !           110: d_ins()
        !           111: {
        !           112:        register struct ins_bkt *insp;
        !           113:        register struct ins_ptr *ipp;
        !           114:        register int save;
        !           115:        char *calloc();
        !           116: 
        !           117:        inst = (struct ins_ptr *) calloc( sizeof op_codes / sizeof op_codes[0], sizeof *inst);
        !           118:        if (inst == NULL) sys_error("could not allocate instruction symbol space ");
        !           119:        for ( ipp = &inst[0], insp = &op_codes[0]; insp->text_i; ipp++, insp++){
        !           120:                ipp->this_p = insp;
        !           121:                ipp->name_p = insp->text_i;
        !           122:                ipp->next_p = ins_hash_tab[save = hash(ipp->name_p)];
        !           123:                ins_hash_tab[save] = ipp;
        !           124:        }
        !           125: }
        !           126: 
        !           127: struct regdef{ char * name_r ; short regno_r; }  defregs[] = {
        !           128:   { "d0", D0REG+0 },
        !           129:   { "d1", D0REG+1 },
        !           130:   { "d2", D0REG+2 },
        !           131:   { "d3", D0REG+3 }, 
        !           132:   { "d4", D0REG+4 },
        !           133:   { "d5", D0REG+5 },
        !           134:   { "d6", D0REG+6 },
        !           135:   { "d7", D0REG+7 },
        !           136:   { "a0", A0REG+0 },
        !           137:   { "a1", A0REG+1 },
        !           138:   { "a2", A0REG+2 },
        !           139:   { "a3", A0REG+3 }, 
        !           140:   { "a4", A0REG+4 },
        !           141:   { "a5", A0REG+5 },
        !           142:   { "a6", A6REG   },
        !           143:   { "a7", A7REG   },
        !           144:   { "sp", A7REG   },
        !           145:   { "pc", PCREG   }, 
        !           146:   { "cc", CCREG   },
        !           147:   { "sr", SRREG   },
        !           148:   { "usp", USPREG+0 },
        !           149:   { "sfc", USPREG+1 },
        !           150:   { "dfc", USPREG+2 },
        !           151:   { "vbr", USPREG+3 },
        !           152:   { "cacr",USPREG+4 }, 
        !           153:   { "caar",USPREG+5 },
        !           154:   { "msp", USPREG+6 },
        !           155:   { "isp", USPREG+7 },
        !           156:   { "fp0", FP0REG+0 },
        !           157:   { "fp1", FP0REG+1 },
        !           158:   { "fp2", FP0REG+2 },
        !           159:   { "fp3", FP0REG+3 },
        !           160:   { "fp4", FP0REG+4 },
        !           161:   { "fp5", FP0REG+5 },
        !           162:   { "fp6", FP0REG+6 },
        !           163:   { "fp7", FP0REG+7 },
        !           164:   { "fpc", FPCREG },
        !           165:   { "fps", FPSREG },
        !           166:   { "fpi", FPIREG },
        !           167:   0, 0
        !           168: };
        !           169: 
        !           170: unsigned reg_access[] = {
        !           171: /*     d0       d1       d2       d3       d4       d5       d6       d7   */
        !           172:        AM_DREG, AM_DREG, AM_DREG, AM_DREG, AM_DREG, AM_DREG, AM_DREG, AM_DREG,
        !           173: /*     a0       a1       a2       a3       a4       a5       a6       a7   */
        !           174:        AM_AREG, AM_AREG, AM_AREG, AM_AREG, AM_AREG, AM_AREG, AM_AREG, AM_AREG,
        !           175: /*      pc       cc       sr       usp                                      */
        !           176:        AM_PCREG,AM_CCREG,AM_CCREG,AM_USPREG|AM_CTRLREG,
        !           177: /*      src         dfc         vbr         cacr                            */
        !           178:        AM_CTRLREG, AM_CTRLREG, AM_CTRLREG, AM_CTRLREG, 
        !           179: /*      caar        msp         isp                                         */
        !           180:        AM_CTRLREG, AM_CTRLREG, AM_CTRLREG, 
        !           181: /*     fp0      fp1      fp2      fp3      fp4      fp5      fp6      fp7   */
        !           182:        AM_FREG, AM_FREG, AM_FREG, AM_FREG, AM_FREG, AM_FREG, AM_FREG, AM_FREG,
        !           183: /*      fpc         fps         fpi                                         */
        !           184:        AM_FCTRLREG, AM_FCTRLREG, AM_FCTRLREG, 
        !           185: };
        !           186: 
        !           187: init_regs()
        !           188:   {    register struct sym_bkt *sbp;
        !           189:        register struct regdef *p = defregs;
        !           190:        register i;
        !           191: 
        !           192:        i = 0;
        !           193:        while (p->name_r) {
        !           194:          sbp = lookup(p->name_r);      /* Make a sym_bkt for it */
        !           195:          sbp->value_s = p->regno_r;    /* Load the sym_bkt */
        !           196:          sbp->csect_s = C_UNDEF;
        !           197:          sbp->attr_s = S_DEC | S_DEF | S_REG;
        !           198:          p++;
        !           199:          i++;
        !           200:        }
        !           201: }
        !           202: 
        !           203: #if C2
        !           204: struct def_builtin { char *bname; short ruse[4]; } def_builtins[] = {
        !           205:        "lmult",        LR+LW,  LR+LW,  0,      0,
        !           206:        "ulmult",       LR+LW,  LR+LW,  0,      0,
        !           207:        "ldivt",        LR+LW,  LR+LW,  0,      0,
        !           208:        "lmodt",        LR+LW,  LR+LW,  0,      0,
        !           209:        "uldivt",       LR+LW,  LR+LW,  0,      0,
        !           210:        "ulmodt",       LR+LW,  LR+LW,  0,      0,
        !           211:        "mcount",       0,      0,      LR,     0,
        !           212:        /* floating-point, too */
        !           213:        "fvaddi",       LR+LW,  LR+LW,  LR+LW,  LW,
        !           214:        "fvsubi",       LR+LW,  LR+LW,  LR+LW,  LW,
        !           215:        "fvmuli",       LR+LW,  LR+LW,  LR+LW,  LW,
        !           216:        "fvdivi",       LR+LW,  LR+LW,  LR+LW,  LW,
        !           217:        "fvcmpi",       LR+LW,  LR+LW,  LR+LW,  LW,
        !           218:        "fvaddis",      LR+LW,  LR+LW,  LW,     LW,
        !           219:        "fvsubis",      LR+LW,  LR+LW,  LW,     LW,
        !           220:        "fvmulis",      LR+LW,  LR+LW,  LW,     LW,
        !           221:        "fvdivis",      LR+LW,  LR+LW,  LW,     LW,
        !           222:        "fvcmpis",      LR+LW,  LR+LW,  LW,     LW,
        !           223:        "fvflti",       LR+LW,  LW,     LW,     LW,
        !           224:        "fvfltis",      LR+LW,  LW,     LW,     LW,
        !           225:        "fvfixi",       LR+LW,  LR+LW,  LW,     LW,
        !           226:        "fvfixis",      LR+LW,  LW,     LW,     LW,
        !           227:        "fvdoublei",    LR+LW,  LW,     LW,     LW,
        !           228:        "fvsinglei",    LR+LW,  LR+LW,  LW,     LW,
        !           229:        0
        !           230: };
        !           231: 
        !           232: init_builtins(){
        !           233:     register struct def_builtin * d; register i; register struct sym_bkt *s;
        !           234:     d = def_builtins;
        !           235:     while (d->bname){
        !           236:        s = lookup(d->bname);
        !           237:        s->csect_s = C_UNDEF;
        !           238:        s->attr_s = S_DEC | S_CRT;
        !           239:        for (i=0; i < sizeof d->ruse / sizeof d->ruse[0] ; i++){
        !           240:            s->builtin_s[i] = d->ruse[i];
        !           241:        }
        !           242:        d++;
        !           243:     }
        !           244: }
        !           245: #endif

unix.superglobalmegacorp.com

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