xref: /inferno-os/utils/ic/i.out.h (revision a93f6c888f6d530420fbb54e2f7fa4572cdc5208)
1*6e84dc96SRichard Miller #define	NSNAME	8
2*6e84dc96SRichard Miller #define	NSYM	50
3*6e84dc96SRichard Miller #define	NREG	32
4*6e84dc96SRichard Miller #define NOPROF	(1<<0)
5*6e84dc96SRichard Miller #define DUPOK	(1<<1)
6*6e84dc96SRichard Miller 
7*6e84dc96SRichard Miller /*
8*6e84dc96SRichard Miller  * Register roles are influenced by the compressed extension:
9*6e84dc96SRichard Miller  *	CIW, CL, CS and CB format use only R8-R15
10*6e84dc96SRichard Miller  *	CL and CS floating load/store use only F8-F15
11*6e84dc96SRichard Miller  *	CI and CSS load/store assume stack pointer is R2
12*6e84dc96SRichard Miller  *	C.JAL assumes link register is R1
13*6e84dc96SRichard Miller  */
14*6e84dc96SRichard Miller enum
15*6e84dc96SRichard Miller {
16*6e84dc96SRichard Miller 	REGZERO		= 0,	/* always zero */
17*6e84dc96SRichard Miller 	REGLINK		= 1,	/* call return address */
18*6e84dc96SRichard Miller 	REGSP		= 2,	/* stack pointer */
19*6e84dc96SRichard Miller 	REGSB		= 3,	/* static base */
20*6e84dc96SRichard Miller 	REGTMP		= 4,	/* assembler temporary */
21*6e84dc96SRichard Miller 	REGEXT		= 7,	/* extern reg from here down */
22*6e84dc96SRichard Miller 	REGRET		= 8,	/* fn return value */
23*6e84dc96SRichard Miller 	REGARG		= 8,	/* fn arg value */
24*6e84dc96SRichard Miller 	REGALLOC	= 15,	/* highest reg to allocate (allow for RV32E) */
25*6e84dc96SRichard Miller 
26*6e84dc96SRichard Miller 	FREGRET		= 0,	/* fn return value */
27*6e84dc96SRichard Miller 	FREGEXT		= 27,	/* extern reg from here down */
28*6e84dc96SRichard Miller 	FREGZERO	= 28,
29*6e84dc96SRichard Miller 	FREGHALF	= 29,
30*6e84dc96SRichard Miller 	FREGONE		= 30,
31*6e84dc96SRichard Miller 	FREGTWO		= 31,
32*6e84dc96SRichard Miller };
33*6e84dc96SRichard Miller 
34*6e84dc96SRichard Miller enum	as
35*6e84dc96SRichard Miller {
36*6e84dc96SRichard Miller 	AXXX = 0,
37*6e84dc96SRichard Miller 
38*6e84dc96SRichard Miller 	/* processor instructions */
39*6e84dc96SRichard Miller 	AADD,
40*6e84dc96SRichard Miller 	AADDW,
41*6e84dc96SRichard Miller 	AAMO_D,
42*6e84dc96SRichard Miller 	AAMO_W,
43*6e84dc96SRichard Miller 	AAND,
44*6e84dc96SRichard Miller 	ABEQ,
45*6e84dc96SRichard Miller 	ABGE,
46*6e84dc96SRichard Miller 	ABGEU,
47*6e84dc96SRichard Miller 	ABLT,
48*6e84dc96SRichard Miller 	ABLTU,
49*6e84dc96SRichard Miller 	ABNE,
50*6e84dc96SRichard Miller 	ACSRRC,
51*6e84dc96SRichard Miller 	ACSRRCI,
52*6e84dc96SRichard Miller 	ACSRRS,
53*6e84dc96SRichard Miller 	ACSRRSI,
54*6e84dc96SRichard Miller 	ACSRRW,
55*6e84dc96SRichard Miller 	ACSRRWI,
56*6e84dc96SRichard Miller 	ADIV,
57*6e84dc96SRichard Miller 	ADIVU,
58*6e84dc96SRichard Miller 	ADIVUW,
59*6e84dc96SRichard Miller 	ADIVW,
60*6e84dc96SRichard Miller 	AFENCE,
61*6e84dc96SRichard Miller 	AFENCE_I,
62*6e84dc96SRichard Miller 	AJAL,
63*6e84dc96SRichard Miller 	AJALR,
64*6e84dc96SRichard Miller 	ALR_D,
65*6e84dc96SRichard Miller 	ALR_W,
66*6e84dc96SRichard Miller 	ALUI,
67*6e84dc96SRichard Miller 	AMOVB,
68*6e84dc96SRichard Miller 	AMOVBU,
69*6e84dc96SRichard Miller 	AMOVH,
70*6e84dc96SRichard Miller 	AMOVHU,
71*6e84dc96SRichard Miller 	AMOV,
72*6e84dc96SRichard Miller 	AMOVW,
73*6e84dc96SRichard Miller 	AMOVWU,
74*6e84dc96SRichard Miller 	AMUL,
75*6e84dc96SRichard Miller 	AMULH,
76*6e84dc96SRichard Miller 	AMULHSU,
77*6e84dc96SRichard Miller 	AMULHU,
78*6e84dc96SRichard Miller 	AMULW,
79*6e84dc96SRichard Miller 	AOR,
80*6e84dc96SRichard Miller 	AREM,
81*6e84dc96SRichard Miller 	AREMU,
82*6e84dc96SRichard Miller 	AREMUW,
83*6e84dc96SRichard Miller 	AREMW,
84*6e84dc96SRichard Miller 	ASC_D,
85*6e84dc96SRichard Miller 	ASC_W,
86*6e84dc96SRichard Miller 	ASLL,
87*6e84dc96SRichard Miller 	ASLLW,
88*6e84dc96SRichard Miller 	ASLT,
89*6e84dc96SRichard Miller 	ASLTU,
90*6e84dc96SRichard Miller 	ASRA,
91*6e84dc96SRichard Miller 	ASRAW,
92*6e84dc96SRichard Miller 	ASRL,
93*6e84dc96SRichard Miller 	ASRLW,
94*6e84dc96SRichard Miller 	ASUB,
95*6e84dc96SRichard Miller 	ASUBW,
96*6e84dc96SRichard Miller 	ASWAP_D,
97*6e84dc96SRichard Miller 	ASWAP_W,
98*6e84dc96SRichard Miller 	ASYS,
99*6e84dc96SRichard Miller 	AXOR,
100*6e84dc96SRichard Miller 
101*6e84dc96SRichard Miller 	/* floating point */
102*6e84dc96SRichard Miller 	AMOVF,      /* FLW, FSW, FSGNJ.S */
103*6e84dc96SRichard Miller 	AMOVD,      /* FLD, FSD, FSGNJ.D */
104*6e84dc96SRichard Miller 	AMOVFD,     /* FCVT.D.S */
105*6e84dc96SRichard Miller 	AMOVDF,     /* FCVT.S.D */
106*6e84dc96SRichard Miller 	AMOVWF,     /* FCVT.S.W */
107*6e84dc96SRichard Miller 	AMOVUF,     /* FCVT.S.WU */
108*6e84dc96SRichard Miller 	AMOVFW,     /* FCVT.W.S */
109*6e84dc96SRichard Miller 	AMOVWD,     /* FCVT.D.W */
110*6e84dc96SRichard Miller 	AMOVUD,     /* FCVT.D.WU */
111*6e84dc96SRichard Miller 	AMOVDW,     /* FCVT.W.D */
112*6e84dc96SRichard Miller 	AADDF,      /* FADD.S */
113*6e84dc96SRichard Miller 	AADDD,      /* FADD.D */
114*6e84dc96SRichard Miller 	ASUBF,      /* FSUB.S */
115*6e84dc96SRichard Miller 	ASUBD,      /* FSUB.D */
116*6e84dc96SRichard Miller 	AMULF,      /* FMUL.S */
117*6e84dc96SRichard Miller 	AMULD,      /* FMUL.D */
118*6e84dc96SRichard Miller 	ADIVF,      /* FDIV.S */
119*6e84dc96SRichard Miller 	ADIVD,      /* FDIV.D */
120*6e84dc96SRichard Miller 	ACMPLTF,     /* FLT.S */
121*6e84dc96SRichard Miller 	ACMPLTD,     /* FLT.D */
122*6e84dc96SRichard Miller 	ACMPEQF,     /* FEQ.S */
123*6e84dc96SRichard Miller 	ACMPEQD,     /* FEQ.D */
124*6e84dc96SRichard Miller 	ACMPLEF,     /* FLE.S */
125*6e84dc96SRichard Miller 	ACMPLED,     /* FLE.S */
126*6e84dc96SRichard Miller 
127*6e84dc96SRichard Miller 	/* floating point instructions not included */
128*6e84dc96SRichard Miller /*
129*6e84dc96SRichard Miller 	FMADD.S    FMADD.D
130*6e84dc96SRichard Miller 	FMSUB.S    FMSUB.D
131*6e84dc96SRichard Miller 	FNMSUB.S   FNMSUB.D
132*6e84dc96SRichard Miller 	FNMADD.S   FNMADD.D
133*6e84dc96SRichard Miller 	FSQRT.S    FSQRT.D
134*6e84dc96SRichard Miller 	FSGNJ.S    FSGNJ.D
135*6e84dc96SRichard Miller 	FSGNJN.S   FSGNJN.D
136*6e84dc96SRichard Miller 	FSGNNX.S   FSGNNX.D
137*6e84dc96SRichard Miller 	FMIN.S     FMIN.D
138*6e84dc96SRichard Miller 	FMAX.S     FMAX.D
139*6e84dc96SRichard Miller 	FMV.X.W
140*6e84dc96SRichard Miller 	FCLASS.S   FCLASS.D
141*6e84dc96SRichard Miller 	FCVT.WU.S  FCVT.WU.D
142*6e84dc96SRichard Miller 	FMV.W.X
143*6e84dc96SRichard Miller  */
144*6e84dc96SRichard Miller 
145*6e84dc96SRichard Miller 
146*6e84dc96SRichard Miller 	/* pseudo-ops */
147*6e84dc96SRichard Miller 	ABGT,
148*6e84dc96SRichard Miller 	ABGTU,
149*6e84dc96SRichard Miller 	ABLE,
150*6e84dc96SRichard Miller 	ABLEU,
151*6e84dc96SRichard Miller 	ASGT,
152*6e84dc96SRichard Miller 	ASGTU,
153*6e84dc96SRichard Miller 	AJMP,
154*6e84dc96SRichard Miller 	ARET,
155*6e84dc96SRichard Miller 	ANOP,
156*6e84dc96SRichard Miller 
157*6e84dc96SRichard Miller 	/* C compiler pseudo-ops */
158*6e84dc96SRichard Miller 	ADATA,
159*6e84dc96SRichard Miller 	AGLOBL,
160*6e84dc96SRichard Miller 	AGOK,
161*6e84dc96SRichard Miller 	AHISTORY,
162*6e84dc96SRichard Miller 	ANAME,
163*6e84dc96SRichard Miller 	ATEXT,
164*6e84dc96SRichard Miller 	AWORD,
165*6e84dc96SRichard Miller 	AEND,
166*6e84dc96SRichard Miller 	ADYNT,
167*6e84dc96SRichard Miller 	AINIT,
168*6e84dc96SRichard Miller 	ASIGNAME,
169*6e84dc96SRichard Miller 
170*6e84dc96SRichard Miller 	/* RV64 extension */
171*6e84dc96SRichard Miller 	ADWORD,
172*6e84dc96SRichard Miller 	AMOVFV,
173*6e84dc96SRichard Miller 	AMOVDV,
174*6e84dc96SRichard Miller 	AMOVVF,
175*6e84dc96SRichard Miller 	AMOVUVF,
176*6e84dc96SRichard Miller 	AMOVVD,
177*6e84dc96SRichard Miller 	AMOVUVD,
178*6e84dc96SRichard Miller 
179*6e84dc96SRichard Miller 	ALAST,
180*6e84dc96SRichard Miller };
181*6e84dc96SRichard Miller 
182*6e84dc96SRichard Miller /* type/name */
183*6e84dc96SRichard Miller enum
184*6e84dc96SRichard Miller {
185*6e84dc96SRichard Miller 	D_GOK	= 0,
186*6e84dc96SRichard Miller 	D_NONE,
187*6e84dc96SRichard Miller 
188*6e84dc96SRichard Miller /* name */
189*6e84dc96SRichard Miller 	D_EXTERN,
190*6e84dc96SRichard Miller 	D_STATIC,
191*6e84dc96SRichard Miller 	D_AUTO,
192*6e84dc96SRichard Miller 	D_PARAM,
193*6e84dc96SRichard Miller 
194*6e84dc96SRichard Miller /* type */
195*6e84dc96SRichard Miller 	D_BRANCH,
196*6e84dc96SRichard Miller 	D_OREG,
197*6e84dc96SRichard Miller 	D_CONST,
198*6e84dc96SRichard Miller 	D_FCONST,
199*6e84dc96SRichard Miller 	D_SCONST,
200*6e84dc96SRichard Miller 	D_REG,
201*6e84dc96SRichard Miller 	D_CTLREG,
202*6e84dc96SRichard Miller 	D_FREG,
203*6e84dc96SRichard Miller 	D_FCREG,
204*6e84dc96SRichard Miller 	D_FILE,
205*6e84dc96SRichard Miller 	D_FILE1,
206*6e84dc96SRichard Miller 	D_VCONST,
207*6e84dc96SRichard Miller };
208*6e84dc96SRichard Miller 
209*6e84dc96SRichard Miller /*
210*6e84dc96SRichard Miller  * this is the ranlib header
211*6e84dc96SRichard Miller  */
212*6e84dc96SRichard Miller #define	SYMDEF	"__.SYMDEF"
213*6e84dc96SRichard Miller 
214*6e84dc96SRichard Miller /*
215*6e84dc96SRichard Miller  * this is the simulated IEEE floating point
216*6e84dc96SRichard Miller  */
217*6e84dc96SRichard Miller typedef	struct	ieee	Ieee;
218*6e84dc96SRichard Miller struct	ieee
219*6e84dc96SRichard Miller {
220*6e84dc96SRichard Miller 	long	l;	/* contains ls-man	0xffffffff */
221*6e84dc96SRichard Miller 	long	h;	/* contains sign	0x80000000
222*6e84dc96SRichard Miller 				    exp		0x7ff00000
223*6e84dc96SRichard Miller 				    ms-man	0x000fffff */
224*6e84dc96SRichard Miller };
225