|
|
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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.