xref: /inferno-os/utils/tc/5.out.h (revision 74a4d8c26dd3c1e9febcb717cfd6cb6512991a7a)
1*74a4d8c2SCharles.Forsyth #define	NSNAME		8
2*74a4d8c2SCharles.Forsyth #define	NSYM		50
3*74a4d8c2SCharles.Forsyth #define	NREG		16
4*74a4d8c2SCharles.Forsyth 
5*74a4d8c2SCharles.Forsyth #define NOPROF		(1<<0)
6*74a4d8c2SCharles.Forsyth #define DUPOK		(1<<1)
7*74a4d8c2SCharles.Forsyth #define	ALLTHUMBS	(1<<2)
8*74a4d8c2SCharles.Forsyth 
9*74a4d8c2SCharles.Forsyth #define	REGRET		0
10*74a4d8c2SCharles.Forsyth #define	REGARG		0
11*74a4d8c2SCharles.Forsyth /* compiler allocates R1 up as temps */
12*74a4d8c2SCharles.Forsyth /* compiler allocates register variables R3 up */
13*74a4d8c2SCharles.Forsyth #define	REGEXT		6
14*74a4d8c2SCharles.Forsyth /* compiler allocates external registers R5 down */
15*74a4d8c2SCharles.Forsyth #define	REGTMPT		7	/* used by the loader - thumb */
16*74a4d8c2SCharles.Forsyth #define	REGTMP		11	/* used by the loader - arm */
17*74a4d8c2SCharles.Forsyth #define	REGSB		12
18*74a4d8c2SCharles.Forsyth #define	REGSP		13
19*74a4d8c2SCharles.Forsyth #define	REGLINK		14
20*74a4d8c2SCharles.Forsyth #define	REGPC		15
21*74a4d8c2SCharles.Forsyth 
22*74a4d8c2SCharles.Forsyth #define	NFREG		8
23*74a4d8c2SCharles.Forsyth #define	FREGRET		0
24*74a4d8c2SCharles.Forsyth #define	FREGEXT		7
25*74a4d8c2SCharles.Forsyth /* compiler allocates register variables F0 up */
26*74a4d8c2SCharles.Forsyth /* compiler allocates external registers F7 down */
27*74a4d8c2SCharles.Forsyth 
28*74a4d8c2SCharles.Forsyth enum	as
29*74a4d8c2SCharles.Forsyth {
30*74a4d8c2SCharles.Forsyth 
31*74a4d8c2SCharles.Forsyth 	AXXX,
32*74a4d8c2SCharles.Forsyth 
33*74a4d8c2SCharles.Forsyth 	AAND,
34*74a4d8c2SCharles.Forsyth 	AEOR,
35*74a4d8c2SCharles.Forsyth 	ASUB,
36*74a4d8c2SCharles.Forsyth 	ARSB,	// not used
37*74a4d8c2SCharles.Forsyth 	AADD,
38*74a4d8c2SCharles.Forsyth 	AADC,
39*74a4d8c2SCharles.Forsyth 	ASBC,
40*74a4d8c2SCharles.Forsyth 	ARSC,	// not used
41*74a4d8c2SCharles.Forsyth 	ATST,
42*74a4d8c2SCharles.Forsyth 	ATEQ,	// not used
43*74a4d8c2SCharles.Forsyth 	ACMP,
44*74a4d8c2SCharles.Forsyth 	ACMN,
45*74a4d8c2SCharles.Forsyth 	AORR,
46*74a4d8c2SCharles.Forsyth 	ABIC,
47*74a4d8c2SCharles.Forsyth 
48*74a4d8c2SCharles.Forsyth 	AMVN,
49*74a4d8c2SCharles.Forsyth 
50*74a4d8c2SCharles.Forsyth 	AB,
51*74a4d8c2SCharles.Forsyth 	ABL,
52*74a4d8c2SCharles.Forsyth 
53*74a4d8c2SCharles.Forsyth 	/*
54*74a4d8c2SCharles.Forsyth 	  * Do not reorder or fragment the conditional branch
55*74a4d8c2SCharles.Forsyth 	  * opcodes, or the predication code will break
56*74a4d8c2SCharles.Forsyth 	  */
57*74a4d8c2SCharles.Forsyth 
58*74a4d8c2SCharles.Forsyth 	ABEQ,
59*74a4d8c2SCharles.Forsyth 	ABNE,
60*74a4d8c2SCharles.Forsyth 	ABCS,
61*74a4d8c2SCharles.Forsyth 	ABHS,
62*74a4d8c2SCharles.Forsyth 	ABCC,
63*74a4d8c2SCharles.Forsyth 	ABLO,
64*74a4d8c2SCharles.Forsyth 	ABMI,
65*74a4d8c2SCharles.Forsyth 	ABPL,
66*74a4d8c2SCharles.Forsyth 	ABVS,
67*74a4d8c2SCharles.Forsyth 	ABVC,
68*74a4d8c2SCharles.Forsyth 	ABHI,
69*74a4d8c2SCharles.Forsyth 	ABLS,
70*74a4d8c2SCharles.Forsyth 	ABGE,
71*74a4d8c2SCharles.Forsyth 	ABLT,
72*74a4d8c2SCharles.Forsyth 	ABGT,
73*74a4d8c2SCharles.Forsyth 	ABLE,
74*74a4d8c2SCharles.Forsyth 
75*74a4d8c2SCharles.Forsyth 	AMOVWD,
76*74a4d8c2SCharles.Forsyth 	AMOVWF,
77*74a4d8c2SCharles.Forsyth 	AMOVDW,
78*74a4d8c2SCharles.Forsyth 	AMOVFW,
79*74a4d8c2SCharles.Forsyth 	AMOVFD,
80*74a4d8c2SCharles.Forsyth 	AMOVDF,
81*74a4d8c2SCharles.Forsyth 	AMOVF,
82*74a4d8c2SCharles.Forsyth 	AMOVD,
83*74a4d8c2SCharles.Forsyth 
84*74a4d8c2SCharles.Forsyth 	ACMPF,
85*74a4d8c2SCharles.Forsyth 	ACMPD,
86*74a4d8c2SCharles.Forsyth 	AADDF,
87*74a4d8c2SCharles.Forsyth 	AADDD,
88*74a4d8c2SCharles.Forsyth 	ASUBF,
89*74a4d8c2SCharles.Forsyth 	ASUBD,
90*74a4d8c2SCharles.Forsyth 	AMULF,
91*74a4d8c2SCharles.Forsyth 	AMULD,
92*74a4d8c2SCharles.Forsyth 	ADIVF,
93*74a4d8c2SCharles.Forsyth 	ADIVD,
94*74a4d8c2SCharles.Forsyth 
95*74a4d8c2SCharles.Forsyth 	ASRL,	// right logical
96*74a4d8c2SCharles.Forsyth 	ASRA,	// right arithmetic
97*74a4d8c2SCharles.Forsyth 	ASLL,	// left logical = left arithmetic
98*74a4d8c2SCharles.Forsyth 	AMULU,
99*74a4d8c2SCharles.Forsyth 	ADIVU,
100*74a4d8c2SCharles.Forsyth 	AMUL,
101*74a4d8c2SCharles.Forsyth 	ADIV,
102*74a4d8c2SCharles.Forsyth 	AMOD,
103*74a4d8c2SCharles.Forsyth 	AMODU,
104*74a4d8c2SCharles.Forsyth 
105*74a4d8c2SCharles.Forsyth 	AMOVB,
106*74a4d8c2SCharles.Forsyth 	AMOVBU,
107*74a4d8c2SCharles.Forsyth 	AMOVH,
108*74a4d8c2SCharles.Forsyth 	AMOVHU,
109*74a4d8c2SCharles.Forsyth 	AMOVW,
110*74a4d8c2SCharles.Forsyth 	AMOVM,
111*74a4d8c2SCharles.Forsyth 	ASWPBU,	// not used
112*74a4d8c2SCharles.Forsyth 	ASWPW,	// not used
113*74a4d8c2SCharles.Forsyth 
114*74a4d8c2SCharles.Forsyth 	ANOP,
115*74a4d8c2SCharles.Forsyth 	ARFE,
116*74a4d8c2SCharles.Forsyth 	ASWI,
117*74a4d8c2SCharles.Forsyth 	AMULA,	// not used
118*74a4d8c2SCharles.Forsyth 
119*74a4d8c2SCharles.Forsyth 	ADATA,
120*74a4d8c2SCharles.Forsyth 	AGLOBL,
121*74a4d8c2SCharles.Forsyth 	AGOK,
122*74a4d8c2SCharles.Forsyth 	AHISTORY,
123*74a4d8c2SCharles.Forsyth 	ANAME,
124*74a4d8c2SCharles.Forsyth 	ARET,	// fn return
125*74a4d8c2SCharles.Forsyth 	ATEXT,	// fn start
126*74a4d8c2SCharles.Forsyth 	AWORD,
127*74a4d8c2SCharles.Forsyth 	ADYNT,	// not used
128*74a4d8c2SCharles.Forsyth 	AINIT,	// not used
129*74a4d8c2SCharles.Forsyth 	ABCASE,	// not used
130*74a4d8c2SCharles.Forsyth 	ACASE,	// not used
131*74a4d8c2SCharles.Forsyth 
132*74a4d8c2SCharles.Forsyth 	AEND,
133*74a4d8c2SCharles.Forsyth 
134*74a4d8c2SCharles.Forsyth 	AMULL,
135*74a4d8c2SCharles.Forsyth 	AMULAL,
136*74a4d8c2SCharles.Forsyth 	AMULLU,
137*74a4d8c2SCharles.Forsyth 	AMULALU,
138*74a4d8c2SCharles.Forsyth 
139*74a4d8c2SCharles.Forsyth 	ABX,
140*74a4d8c2SCharles.Forsyth 	ABXRET,
141*74a4d8c2SCharles.Forsyth 
142*74a4d8c2SCharles.Forsyth 	ADWORD,
143*74a4d8c2SCharles.Forsyth 
144*74a4d8c2SCharles.Forsyth 	ASIGNAME,
145*74a4d8c2SCharles.Forsyth 
146*74a4d8c2SCharles.Forsyth 	ALAST,
147*74a4d8c2SCharles.Forsyth 
148*74a4d8c2SCharles.Forsyth };
149*74a4d8c2SCharles.Forsyth 
150*74a4d8c2SCharles.Forsyth /* type/name */
151*74a4d8c2SCharles.Forsyth #define	D_GOK	0
152*74a4d8c2SCharles.Forsyth #define	D_NONE	1
153*74a4d8c2SCharles.Forsyth 
154*74a4d8c2SCharles.Forsyth /* type */
155*74a4d8c2SCharles.Forsyth #define	D_BRANCH	(D_NONE+1)
156*74a4d8c2SCharles.Forsyth #define	D_OREG		(D_NONE+2)
157*74a4d8c2SCharles.Forsyth #define	D_CONST		(D_NONE+7)
158*74a4d8c2SCharles.Forsyth #define	D_FCONST	(D_NONE+8)
159*74a4d8c2SCharles.Forsyth #define	D_SCONST	(D_NONE+9)
160*74a4d8c2SCharles.Forsyth #define	D_PSR		(D_NONE+10)
161*74a4d8c2SCharles.Forsyth #define	D_REG		(D_NONE+12)
162*74a4d8c2SCharles.Forsyth #define	D_FREG		(D_NONE+13)
163*74a4d8c2SCharles.Forsyth #define	D_FILE		(D_NONE+16)
164*74a4d8c2SCharles.Forsyth #define	D_OCONST	(D_NONE+17)
165*74a4d8c2SCharles.Forsyth #define	D_FILE1		(D_NONE+18)
166*74a4d8c2SCharles.Forsyth 
167*74a4d8c2SCharles.Forsyth #define	D_SHIFT		(D_NONE+19)	/* not used */
168*74a4d8c2SCharles.Forsyth #define	D_FPCR		(D_NONE+20)
169*74a4d8c2SCharles.Forsyth #define 	D_REGREG	(D_NONE+21)
170*74a4d8c2SCharles.Forsyth 
171*74a4d8c2SCharles.Forsyth /* name */
172*74a4d8c2SCharles.Forsyth #define	D_EXTERN	(D_NONE+3)
173*74a4d8c2SCharles.Forsyth #define	D_STATIC		(D_NONE+4)
174*74a4d8c2SCharles.Forsyth #define	D_AUTO		(D_NONE+5)
175*74a4d8c2SCharles.Forsyth #define	D_PARAM		(D_NONE+6)
176*74a4d8c2SCharles.Forsyth 
177*74a4d8c2SCharles.Forsyth /*
178*74a4d8c2SCharles.Forsyth  * this is the ranlib header
179*74a4d8c2SCharles.Forsyth  */
180*74a4d8c2SCharles.Forsyth #define	SYMDEF	"__.SYMDEF"
181*74a4d8c2SCharles.Forsyth 
182*74a4d8c2SCharles.Forsyth /*
183*74a4d8c2SCharles.Forsyth  * this is the simulated IEEE floating point
184*74a4d8c2SCharles.Forsyth  */
185*74a4d8c2SCharles.Forsyth typedef	struct	ieee	Ieee;
186*74a4d8c2SCharles.Forsyth struct	ieee
187*74a4d8c2SCharles.Forsyth {
188*74a4d8c2SCharles.Forsyth 	long	l;	/* contains ls-man	0xffffffff */
189*74a4d8c2SCharles.Forsyth 	long	h;	/* contains sign	0x80000000
190*74a4d8c2SCharles.Forsyth 				    exp		0x7ff00000
191*74a4d8c2SCharles.Forsyth 				    ms-man	0x000fffff */
192*74a4d8c2SCharles.Forsyth };
193