depend needs instrs.c2
[unix-history] / usr / src / old / as.tahoe / instrs.h
CommitLineData
0f78cceb
KB
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
91struct 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