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 TYPF 004 /* F float */ 16 #define TYPD 005 /* D float */ 17 #define TYPNONE 006 /* when nothing */ 18 #define TYPLG 3 /* number of bits the above take up */ 19 20 #define TYPMASK ((1<<TYPLG)-1) /* the mask (assumes 2's comp arith) */ 21 /* 22 * Constructors and extractors for argument access kinds and types 23 */ 24 #define A_CONS(access, type) ((access) | (type)) 25 #define A_ACCEXT(consed) ((consed) & (TYPMASK << TYPLG)) 26 #define A_TYPEXT(consed) ((consed) & TYPMASK) 27 28 /* 29 * Argument access types used to test validity of operands to operators 30 */ 31 #define ACCR (1<<TYPLG) /* read */ 32 #define ACCW (2<<TYPLG) /* write */ 33 #define ACCB (4<<TYPLG) /* branch displacement */ 34 #define ACCA (8<<TYPLG) /* address only */ 35 #define ACCM (ACCR | ACCW) /* modify */ 36 #define ACCI (ACCB | ACCR) /* XFC code */ 37 38 #define ACCESSMASK (ACCA | ACCR | ACCW | ACCB) /* the mask */ 39 40 /* 41 * Construction of TYPX and ACCX, to make the instrs table 42 * easy to use and read. 43 */ 44 /* 45 * For real memory address 46 */ 47 #define A_AB A_CONS(ACCA, TYPB) 48 #define A_AW A_CONS(ACCA, TYPW) 49 #define A_AL A_CONS(ACCA, TYPL) 50 #define A_AQ A_CONS(ACCA, TYPQ) 51 #define A_AF A_CONS(ACCA, TYPF) 52 #define A_AD A_CONS(ACCA, TYPD) 53 /* 54 * For branch displacement 55 */ 56 #define A_BB A_CONS(ACCB, TYPB) 57 #define A_BW A_CONS(ACCB, TYPW) 58 /* 59 * For modification 60 */ 61 #define A_MB A_CONS(ACCM, TYPB) 62 #define A_MW A_CONS(ACCM, TYPW) 63 #define A_ML A_CONS(ACCM, TYPL) 64 #define A_MF A_CONS(ACCM, TYPF) 65 #define A_MD A_CONS(ACCM, TYPD) 66 /* 67 * For reading 68 */ 69 #define A_RB A_CONS(ACCR, TYPB) 70 #define A_RW A_CONS(ACCR, TYPW) 71 #define A_RL A_CONS(ACCR, TYPL) 72 #define A_RQ A_CONS(ACCR, TYPQ) 73 #define A_RF A_CONS(ACCR, TYPF) 74 #define A_RD A_CONS(ACCR, TYPD) 75 /* 76 * For writing 77 */ 78 #define A_WB A_CONS(ACCW, TYPB) 79 #define A_WW A_CONS(ACCW, TYPW) 80 #define A_WL A_CONS(ACCW, TYPL) 81 #define A_WQ A_CONS(ACCW, TYPQ) 82 #define A_WF A_CONS(ACCW, TYPF) 83 #define A_WD A_CONS(ACCW, TYPD) 84 85 #ifndef INSTTAB 86 /* 87 * Define what the entries in the table look like. 88 * This is only used for adb and sdb; not for as. 89 */ 90 #define INSTTAB 91 struct insttab{ 92 char *iname; 93 u_char opcode; 94 char nargs; 95 u_char argtype[6]; 96 } insttab[]; 97 98 #define OP(name,opcode,nargs,a1,a2,a3,a4,a5,a6) {name,opcode,nargs,a1,a2,a3,a4,a5,a6} 99 100 #endif INSTTAB 101 102