Annotation of 42BSD/bin/as/instrs.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  *     Copyright (c) 1982 Regents of the University of California
                      3:  *     @(#)instrs.h 4.5 6/9/83
                      4:  */
                      5: /*
                      6:  *     Argument data types
                      7:  *
                      8:  *     If you change these definitions, you must also change the tables
                      9:  *     in assizetab.c
                     10:  */
                     11: #define        TYPB            000     /* byte integer */
                     12: #define        TYPW            001     /* word integer */
                     13: #define        TYPL            002     /* long integer */
                     14: #define        TYPQ            003     /* quad integer */
                     15: #define        TYPO            004     /* octa integer */
                     16: #define        TYPF            005     /* F float */
                     17: #define        TYPD            006     /* D float */
                     18: #define        TYPG            007     /* G float */
                     19: #define        TYPH            010     /* H float */
                     20: #define        TYPUNPACKED     011     /* when unpacked into mantissa & exponent */
                     21: #define        TYPNONE         012     /* when nothing */
                     22: #define        TYPLG           4       /* number of bits the above take up */
                     23: 
                     24: #define        TYPMASK ((1<<TYPLG)-1)  /* the mask (assumes 2's comp arith) */
                     25: /*
                     26:  *     Constructors and extractors for argument access kinds and types
                     27:  */
                     28: #define A_CONS(access, type)   ((access) | (type))
                     29: #define        A_ACCEXT(consed)        ((consed) & (TYPMASK << TYPLG))
                     30: #define        A_TYPEXT(consed)        ((consed) & TYPMASK)
                     31: 
                     32: /*
                     33:  * Argument access types used to test validity of operands to operators
                     34:  */
                     35: #define        ACCR    (1<<TYPLG)                      /* read */
                     36: #define        ACCW    (2<<TYPLG)                      /* write */
                     37: #define        ACCB    (4<<TYPLG)                      /* branch displacement */
                     38: #define        ACCA    (8<<TYPLG)                      /* address only */
                     39: #define        ACCV    (8<<TYPLG)                      /* address only */
                     40: #define        ACCM    (ACCR | ACCW)                   /* modify */
                     41: #define        ACCI    (ACCB | ACCR)                   /* XFC code */
                     42: 
                     43: #define ACCESSMASK     (ACCA | ACCR | ACCW | ACCB)     /* the mask */
                     44: 
                     45: /*
                     46:  *     Construction of TYPX and ACCX, to make the instrs table
                     47:  *     easy to use and read.
                     48:  */
                     49: /*
                     50:  *     For real memory address
                     51:  */
                     52: #define        A_AB    A_CONS(ACCA, TYPB)
                     53: #define        A_AW    A_CONS(ACCA, TYPW)
                     54: #define        A_AL    A_CONS(ACCA, TYPL)
                     55: #define        A_AQ    A_CONS(ACCA, TYPQ)
                     56: #define        A_AO    A_CONS(ACCA, TYPO)
                     57: #define        A_AF    A_CONS(ACCA, TYPF)
                     58: #define        A_AD    A_CONS(ACCA, TYPD)
                     59: #define        A_AG    A_CONS(ACCA, TYPG)
                     60: #define        A_AH    A_CONS(ACCA, TYPH)
                     61: /*
                     62:  *     For real memory addresses, or register addresses [sic]
                     63:  *
                     64:  *     CHEAT! we just call these read access, since
                     65:  *     registers are allowed. All field instruction, except insv,
                     66:  *     are are read access fields.
                     67:  */
                     68: #define        A_VB    A_CONS(ACCR, TYPB)
                     69: #define        A_VW    A_CONS(ACCR, TYPW)
                     70: #define        A_VL    A_CONS(ACCR, TYPL)
                     71: #define        A_VQ    A_CONS(ACCR, TYPQ)
                     72: #define        A_VO    A_CONS(ACCR, TYPO)
                     73: #define        A_VF    A_CONS(ACCR, TYPF)
                     74: #define        A_VD    A_CONS(ACCR, TYPD)
                     75: #define        A_VG    A_CONS(ACCR, TYPG)
                     76: #define        A_VH    A_CONS(ACCR, TYPH)
                     77: /*
                     78:  *     For branch displacement
                     79:  */
                     80: #define        A_BB    A_CONS(ACCB, TYPB)
                     81: #define        A_BW    A_CONS(ACCB, TYPW)
                     82: /*
                     83:  *     For modification
                     84:  */
                     85: #define        A_MB    A_CONS(ACCM, TYPB)
                     86: #define        A_MW    A_CONS(ACCM, TYPW)
                     87: #define        A_ML    A_CONS(ACCM, TYPL)
                     88: #define        A_MF    A_CONS(ACCM, TYPF)
                     89: #define        A_MD    A_CONS(ACCM, TYPD)
                     90: #define        A_MG    A_CONS(ACCM, TYPG)
                     91: #define        A_MH    A_CONS(ACCM, TYPH)
                     92: /*
                     93:  *     For reading
                     94:  */
                     95: #define        A_RB    A_CONS(ACCR, TYPB)
                     96: #define        A_RW    A_CONS(ACCR, TYPW)
                     97: #define        A_RL    A_CONS(ACCR, TYPL)
                     98: #define        A_RQ    A_CONS(ACCR, TYPQ)
                     99: #define        A_RO    A_CONS(ACCR, TYPO)
                    100: #define        A_RF    A_CONS(ACCR, TYPF)
                    101: #define        A_RD    A_CONS(ACCR, TYPD)
                    102: #define        A_RG    A_CONS(ACCR, TYPG)
                    103: #define        A_RH    A_CONS(ACCR, TYPH)
                    104: /*
                    105:  *     For writing
                    106:  */
                    107: #define        A_WB    A_CONS(ACCW, TYPB)
                    108: #define        A_WW    A_CONS(ACCW, TYPW)
                    109: #define        A_WL    A_CONS(ACCW, TYPL)
                    110: #define        A_WQ    A_CONS(ACCW, TYPQ)
                    111: #define        A_WO    A_CONS(ACCW, TYPO)
                    112: #define        A_WF    A_CONS(ACCW, TYPF)
                    113: #define        A_WD    A_CONS(ACCW, TYPD)
                    114: #define        A_WG    A_CONS(ACCW, TYPG)
                    115: #define        A_WH    A_CONS(ACCW, TYPH)
                    116: 
                    117: #ifndef INSTTAB
                    118: /*
                    119:  *     Define what the entries in the table look like.
                    120:  *     This is only used for adb and sdb; not for as.
                    121:  */
                    122: #define        INSTTAB
                    123: struct insttab{
                    124:        char    *iname;
                    125:        u_char  eopcode;
                    126:        u_char  popcode;
                    127:        char    nargs;
                    128:        u_char  argtype[6];
                    129: } insttab[];
                    130: 
                    131: #define OP(name,eopcode,popdcode,nargs,a1,a2,a3,a4,a5,a6) {name,eopcode,popdcode,nargs,a1,a2,a3,a4,a5,a6}
                    132: 
                    133: #endif INSTTAB
                    134: 
                    135: /*
                    136:  *     Definitions for the escape bytes
                    137:  */
                    138: #define        CORE    0
                    139: #define        NEW     1
                    140: #define        ESCD    0xfd
                    141: #define        ESCF    0xff

unix.superglobalmegacorp.com

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