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