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