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