Bell 32V development
[unix-history] / usr / src / cmd / as / as.h
CommitLineData
99803149
TL
1#
2/* %Z%%M% %R%.%L% %D% %T% */
3#define readonly
4#define NINST 300
5#define NSYM 3000
6#define NHASH (NSYM+1)
7#define NLOC 4 /* number of location ctrs */
8#define NCPS 8
9
10/*
11 * Symbol types
12 */
13#define XUNDEF 0x0
14#define XABS 0x2
15#define XTEXT 0x4
16#define XDATA 0x6
17#define XBSS 0x8
18#define XDATAO 0xA
19#define XBSSO 0xC
20#define XTEXTO 0xE
21#define XABSO 0x10
22#define XUNDEFO 0x12
23
24#define XTXRN 0xA
25#define XXTRN 0x1
26#define XTYPE 0x1E
27
28#define XFORW 0x20 /* Was forward-referenced when undefined */
29
30#define ERR (-1)
31#define NBPW 32
32
33#define AMASK 017
34
35/*
36 * Actual argument syntax types
37 */
38#define AREG 1 /* %r */
39#define ABASE 2 /* (%r) */
40#define ADECR 3 /* -(%r) */
41#define AINCR 4 /* (%r)+ */
42#define ADISP 5 /* expr(%r) */
43#define AEXP 6 /* expr */
44#define AIMM 7 /* $ expr */
45#define ASTAR 8 /* * */
46#define AINDX 16 /* [%r] */
47
48/*
49 * Argument access types
50 */
51#define ACCA (8<<3) /* address only */
52#define ACCR (1<<3) /* read */
53#define ACCW (2<<3) /* write */
54#define ACCM (3<<3) /* modify */
55#define ACCB (4<<3) /* branch displacement */
56#define ACCI (5<<3) /* XFC code */
57
58/*
59 * Argument data types
60 */
61#define TYPB 0 /* byte */
62#define TYPW 1 /* word */
63#define TYPL 2 /* long */
64#define TYPQ 3 /* quad */
65#define TYPF 4 /* floating */
66#define TYPD 5 /* double floating */
67
68#define TYPMASK 7
69
70/* reference types for loader */
71#define PCREL 1
72#define LEN1 2
73#define LEN2 4
74#define LEN4 6
75#define LEN8 8
76
77#define TMPC 7
78#define HW 01
79#define FW 03
80#define DW 07
81
82#define PAGRND 0x1FFL
83
84#define round(x,y) (((x)+(y)) & ~(y))
85
86#define STABTYPS 0340
87
88struct symtab {
89 char name[NCPS];
90 char type;
91 char tag;
92 short index;
93 long value;
94 char ptype;
95 char other;
96 short desc;
97};
98
99struct instab {
100 char name[NCPS];
101 char opcode; /* must have same offset as symtab.type */
102 char tag; /* yacc-coded nargs (INST0, ...) or token # (IALIGN, ...) */
103 char nargs;
104 char argtyp[6];
105};
106
107struct arg {
108 char atype;
109 char areg1;
110 char areg2;
111 struct exp *xp;
112};
113
114struct exp {
115 char xtype;
116 char xloc;
117 long xvalue;
118 long yvalue; /* 2nd half of double floating */
119 struct symtab *xname;
120};
121
122struct hdr {
123 long magic;
124 long tsize;
125 long dsize;
126 long bsize;
127 long ssize;
128 long entry;
129 long trsize;
130 long drsize;
131};
132
133struct symtab *symtab;
134struct symtab *hshtab[NHASH];
135struct arg arglist[6];
136struct exp explist[20];
137extern int lineno;
138extern int hshused;
139extern int usrname;
140extern int lclname;
141extern struct symtab *nextsym;
142extern struct exp usedot[NLOC+NLOC];
143extern FILE *usefile[NLOC+NLOC];
144extern FILE *rusefile[NLOC+NLOC];
145extern char *tmpn2;
146extern char *tmpn3;
147extern struct exp *dotp;
148extern int loctr;
149extern long tsize;
150extern long dsize;
151extern long datbase;
152extern int bitoff;
153extern long bitfield;
154extern char yytext[NCPS+2];
155extern FILE *txtfil;
156extern FILE *tmpfil;
157extern FILE *relfil;
158extern int passno;
159extern int argcnt;
160extern int anyerrs;
161extern int *brptr;
162struct instab *itab[NINST];
163struct instab instab[];
164int curlen;
165int gindex;
166int orgwarn;
167struct symtab **lookup();
168struct exp *combine();