xref: /aosp_15_r20/external/mesa3d/src/freedreno/rnn/rnn.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Copyright © 2010 Marcin Kościelnicki <[email protected]>
3*61046927SAndroid Build Coastguard Worker  * Copyright © 2010 Luca Barbieri <[email protected]>
4*61046927SAndroid Build Coastguard Worker  * All Rights Reserved.
5*61046927SAndroid Build Coastguard Worker  * SPDX-License-Identifier: MIT
6*61046927SAndroid Build Coastguard Worker  */
7*61046927SAndroid Build Coastguard Worker 
8*61046927SAndroid Build Coastguard Worker #ifndef RNN_H
9*61046927SAndroid Build Coastguard Worker #define RNN_H
10*61046927SAndroid Build Coastguard Worker 
11*61046927SAndroid Build Coastguard Worker #include <stdint.h>
12*61046927SAndroid Build Coastguard Worker #include <stdlib.h>
13*61046927SAndroid Build Coastguard Worker 
14*61046927SAndroid Build Coastguard Worker struct rnnauthor {
15*61046927SAndroid Build Coastguard Worker 	char* name;
16*61046927SAndroid Build Coastguard Worker 	char* email;
17*61046927SAndroid Build Coastguard Worker 	char* contributions;
18*61046927SAndroid Build Coastguard Worker 	char* license;
19*61046927SAndroid Build Coastguard Worker 	char** nicknames;
20*61046927SAndroid Build Coastguard Worker 	int nicknamesnum;
21*61046927SAndroid Build Coastguard Worker 	int nicknamesmax;
22*61046927SAndroid Build Coastguard Worker };
23*61046927SAndroid Build Coastguard Worker 
24*61046927SAndroid Build Coastguard Worker struct rnncopyright {
25*61046927SAndroid Build Coastguard Worker 	unsigned firstyear;
26*61046927SAndroid Build Coastguard Worker 	char* license;
27*61046927SAndroid Build Coastguard Worker 	struct rnnauthor **authors;
28*61046927SAndroid Build Coastguard Worker 	int authorsnum;
29*61046927SAndroid Build Coastguard Worker 	int authorsmax;
30*61046927SAndroid Build Coastguard Worker };
31*61046927SAndroid Build Coastguard Worker 
32*61046927SAndroid Build Coastguard Worker struct rnndb {
33*61046927SAndroid Build Coastguard Worker 	struct rnncopyright copyright;
34*61046927SAndroid Build Coastguard Worker 	struct rnnenum **enums;
35*61046927SAndroid Build Coastguard Worker 	int enumsnum;
36*61046927SAndroid Build Coastguard Worker 	int enumsmax;
37*61046927SAndroid Build Coastguard Worker 	struct rnnbitset **bitsets;
38*61046927SAndroid Build Coastguard Worker 	int bitsetsnum;
39*61046927SAndroid Build Coastguard Worker 	int bitsetsmax;
40*61046927SAndroid Build Coastguard Worker 	struct rnndomain **domains;
41*61046927SAndroid Build Coastguard Worker 	int domainsnum;
42*61046927SAndroid Build Coastguard Worker 	int domainsmax;
43*61046927SAndroid Build Coastguard Worker 	struct rnngroup **groups;
44*61046927SAndroid Build Coastguard Worker 	int groupsnum;
45*61046927SAndroid Build Coastguard Worker 	int groupsmax;
46*61046927SAndroid Build Coastguard Worker 	struct rnnspectype **spectypes;
47*61046927SAndroid Build Coastguard Worker 	int spectypesnum;
48*61046927SAndroid Build Coastguard Worker 	int spectypesmax;
49*61046927SAndroid Build Coastguard Worker 	char **files;
50*61046927SAndroid Build Coastguard Worker 	int filesnum;
51*61046927SAndroid Build Coastguard Worker 	int filesmax;
52*61046927SAndroid Build Coastguard Worker 	int estatus;
53*61046927SAndroid Build Coastguard Worker };
54*61046927SAndroid Build Coastguard Worker 
55*61046927SAndroid Build Coastguard Worker struct rnnvarset {
56*61046927SAndroid Build Coastguard Worker 	struct rnnenum *venum;
57*61046927SAndroid Build Coastguard Worker 	int *variants;
58*61046927SAndroid Build Coastguard Worker };
59*61046927SAndroid Build Coastguard Worker 
60*61046927SAndroid Build Coastguard Worker struct rnnvarinfo {
61*61046927SAndroid Build Coastguard Worker 	char *prefixstr;
62*61046927SAndroid Build Coastguard Worker 	char *varsetstr;
63*61046927SAndroid Build Coastguard Worker 	char *variantsstr;
64*61046927SAndroid Build Coastguard Worker 	int dead;
65*61046927SAndroid Build Coastguard Worker 	struct rnnenum *prefenum;
66*61046927SAndroid Build Coastguard Worker 	char *prefix;
67*61046927SAndroid Build Coastguard Worker 	struct rnnvarset **varsets;
68*61046927SAndroid Build Coastguard Worker 	int varsetsnum;
69*61046927SAndroid Build Coastguard Worker 	int varsetsmax;
70*61046927SAndroid Build Coastguard Worker };
71*61046927SAndroid Build Coastguard Worker 
72*61046927SAndroid Build Coastguard Worker struct rnnenum {
73*61046927SAndroid Build Coastguard Worker 	char *name;
74*61046927SAndroid Build Coastguard Worker 	int bare;
75*61046927SAndroid Build Coastguard Worker 	int isinline;
76*61046927SAndroid Build Coastguard Worker 	struct rnnvarinfo varinfo;
77*61046927SAndroid Build Coastguard Worker 	struct rnnvalue **vals;
78*61046927SAndroid Build Coastguard Worker 	int valsnum;
79*61046927SAndroid Build Coastguard Worker 	int valsmax;
80*61046927SAndroid Build Coastguard Worker 	char *fullname;
81*61046927SAndroid Build Coastguard Worker 	int prepared;
82*61046927SAndroid Build Coastguard Worker 	char *file;
83*61046927SAndroid Build Coastguard Worker };
84*61046927SAndroid Build Coastguard Worker 
85*61046927SAndroid Build Coastguard Worker struct rnnvalue {
86*61046927SAndroid Build Coastguard Worker 	char *name;
87*61046927SAndroid Build Coastguard Worker 	int valvalid;
88*61046927SAndroid Build Coastguard Worker 	uint64_t value;
89*61046927SAndroid Build Coastguard Worker 	struct rnnvarinfo varinfo;
90*61046927SAndroid Build Coastguard Worker 	char *fullname;
91*61046927SAndroid Build Coastguard Worker 	char *file;
92*61046927SAndroid Build Coastguard Worker };
93*61046927SAndroid Build Coastguard Worker 
94*61046927SAndroid Build Coastguard Worker struct rnntypeinfo {
95*61046927SAndroid Build Coastguard Worker 	char *name;
96*61046927SAndroid Build Coastguard Worker 	enum rnnttype {
97*61046927SAndroid Build Coastguard Worker 		RNN_TTYPE_INVALID,
98*61046927SAndroid Build Coastguard Worker 		RNN_TTYPE_INLINE_ENUM,
99*61046927SAndroid Build Coastguard Worker 		RNN_TTYPE_INLINE_BITSET,
100*61046927SAndroid Build Coastguard Worker 		RNN_TTYPE_ENUM,
101*61046927SAndroid Build Coastguard Worker 		RNN_TTYPE_BITSET,
102*61046927SAndroid Build Coastguard Worker 		RNN_TTYPE_SPECTYPE,
103*61046927SAndroid Build Coastguard Worker 		RNN_TTYPE_HEX,
104*61046927SAndroid Build Coastguard Worker 		RNN_TTYPE_INT,
105*61046927SAndroid Build Coastguard Worker 		RNN_TTYPE_UINT,
106*61046927SAndroid Build Coastguard Worker 		RNN_TTYPE_FLOAT,
107*61046927SAndroid Build Coastguard Worker 		RNN_TTYPE_BOOLEAN,
108*61046927SAndroid Build Coastguard Worker 		RNN_TTYPE_FIXED,
109*61046927SAndroid Build Coastguard Worker 		RNN_TTYPE_UFIXED,
110*61046927SAndroid Build Coastguard Worker 		RNN_TTYPE_A3XX_REGID,
111*61046927SAndroid Build Coastguard Worker 	} type;
112*61046927SAndroid Build Coastguard Worker 	struct rnnenum *eenum;
113*61046927SAndroid Build Coastguard Worker 	struct rnnbitset *ebitset;
114*61046927SAndroid Build Coastguard Worker 	struct rnnspectype *spectype;
115*61046927SAndroid Build Coastguard Worker 	struct rnnbitfield **bitfields;
116*61046927SAndroid Build Coastguard Worker 	int bitfieldsnum;
117*61046927SAndroid Build Coastguard Worker 	int bitfieldsmax;
118*61046927SAndroid Build Coastguard Worker 	struct rnnvalue **vals;
119*61046927SAndroid Build Coastguard Worker 	int valsnum;
120*61046927SAndroid Build Coastguard Worker 	int valsmax;
121*61046927SAndroid Build Coastguard Worker 	int shr, low, high;
122*61046927SAndroid Build Coastguard Worker 	uint64_t min, max, align, radix;
123*61046927SAndroid Build Coastguard Worker 	int addvariant;
124*61046927SAndroid Build Coastguard Worker 	int minvalid, maxvalid, alignvalid, radixvalid;
125*61046927SAndroid Build Coastguard Worker };
126*61046927SAndroid Build Coastguard Worker 
typeinfo_mask(struct rnntypeinfo * ti)127*61046927SAndroid Build Coastguard Worker static inline uint64_t typeinfo_mask(struct rnntypeinfo *ti)
128*61046927SAndroid Build Coastguard Worker {
129*61046927SAndroid Build Coastguard Worker 	if (ti->high == 63)
130*61046927SAndroid Build Coastguard Worker 		return -(1ULL << ti->low);
131*61046927SAndroid Build Coastguard Worker 	else
132*61046927SAndroid Build Coastguard Worker 		return (1ULL << (ti->high + 1)) - (1ULL << ti->low);
133*61046927SAndroid Build Coastguard Worker }
134*61046927SAndroid Build Coastguard Worker 
135*61046927SAndroid Build Coastguard Worker struct rnnbitset {
136*61046927SAndroid Build Coastguard Worker 	char *name;
137*61046927SAndroid Build Coastguard Worker 	int bare;
138*61046927SAndroid Build Coastguard Worker 	int isinline;
139*61046927SAndroid Build Coastguard Worker 	struct rnnvarinfo varinfo;
140*61046927SAndroid Build Coastguard Worker 	struct rnnbitfield **bitfields;
141*61046927SAndroid Build Coastguard Worker 	int bitfieldsnum;
142*61046927SAndroid Build Coastguard Worker 	int bitfieldsmax;
143*61046927SAndroid Build Coastguard Worker 	char *fullname;
144*61046927SAndroid Build Coastguard Worker 	char *file;
145*61046927SAndroid Build Coastguard Worker };
146*61046927SAndroid Build Coastguard Worker 
147*61046927SAndroid Build Coastguard Worker struct rnnbitfield {
148*61046927SAndroid Build Coastguard Worker 	char *name;
149*61046927SAndroid Build Coastguard Worker 	struct rnnvarinfo varinfo;
150*61046927SAndroid Build Coastguard Worker 	struct rnntypeinfo typeinfo;
151*61046927SAndroid Build Coastguard Worker 	char *fullname;
152*61046927SAndroid Build Coastguard Worker 	char *file;
153*61046927SAndroid Build Coastguard Worker };
154*61046927SAndroid Build Coastguard Worker 
155*61046927SAndroid Build Coastguard Worker struct rnndomain {
156*61046927SAndroid Build Coastguard Worker 	char *name;
157*61046927SAndroid Build Coastguard Worker 	int bare;
158*61046927SAndroid Build Coastguard Worker 	int width;
159*61046927SAndroid Build Coastguard Worker 	uint64_t size;
160*61046927SAndroid Build Coastguard Worker 	int sizevalid;
161*61046927SAndroid Build Coastguard Worker 	struct rnnvarinfo varinfo;
162*61046927SAndroid Build Coastguard Worker 	struct rnndelem **subelems;
163*61046927SAndroid Build Coastguard Worker 	int subelemsnum;
164*61046927SAndroid Build Coastguard Worker 	int subelemsmax;
165*61046927SAndroid Build Coastguard Worker 	char *fullname;
166*61046927SAndroid Build Coastguard Worker 	char *file;
167*61046927SAndroid Build Coastguard Worker };
168*61046927SAndroid Build Coastguard Worker 
169*61046927SAndroid Build Coastguard Worker struct rnngroup {
170*61046927SAndroid Build Coastguard Worker 	char *name;
171*61046927SAndroid Build Coastguard Worker 	struct rnndelem **subelems;
172*61046927SAndroid Build Coastguard Worker 	int subelemsnum;
173*61046927SAndroid Build Coastguard Worker 	int subelemsmax;
174*61046927SAndroid Build Coastguard Worker };
175*61046927SAndroid Build Coastguard Worker 
176*61046927SAndroid Build Coastguard Worker struct rnndelem {
177*61046927SAndroid Build Coastguard Worker 	enum rnnetype {
178*61046927SAndroid Build Coastguard Worker 		RNN_ETYPE_REG,
179*61046927SAndroid Build Coastguard Worker 		RNN_ETYPE_ARRAY,
180*61046927SAndroid Build Coastguard Worker 		RNN_ETYPE_STRIPE,
181*61046927SAndroid Build Coastguard Worker 		RNN_ETYPE_USE_GROUP,
182*61046927SAndroid Build Coastguard Worker 	} type;
183*61046927SAndroid Build Coastguard Worker 	char *name;
184*61046927SAndroid Build Coastguard Worker 	int width;
185*61046927SAndroid Build Coastguard Worker 	enum rnnaccess {
186*61046927SAndroid Build Coastguard Worker 		RNN_ACCESS_R,
187*61046927SAndroid Build Coastguard Worker 		RNN_ACCESS_W,
188*61046927SAndroid Build Coastguard Worker 		RNN_ACCESS_RW,
189*61046927SAndroid Build Coastguard Worker 	} access;
190*61046927SAndroid Build Coastguard Worker 	uint64_t offset;
191*61046927SAndroid Build Coastguard Worker 	uint64_t *offsets;       /* for "array" with irregular offsets */
192*61046927SAndroid Build Coastguard Worker 	int offsetsnum;
193*61046927SAndroid Build Coastguard Worker 	int offsetsmax;
194*61046927SAndroid Build Coastguard Worker 	char *doffset;
195*61046927SAndroid Build Coastguard Worker 	char **doffsets;
196*61046927SAndroid Build Coastguard Worker 	int doffsetsnum;
197*61046927SAndroid Build Coastguard Worker 	int doffsetsmax;
198*61046927SAndroid Build Coastguard Worker 	uint64_t length;
199*61046927SAndroid Build Coastguard Worker 	uint64_t stride;
200*61046927SAndroid Build Coastguard Worker 	struct rnndelem **subelems;
201*61046927SAndroid Build Coastguard Worker 	int subelemsnum;
202*61046927SAndroid Build Coastguard Worker 	int subelemsmax;
203*61046927SAndroid Build Coastguard Worker 	struct rnnvarinfo varinfo;
204*61046927SAndroid Build Coastguard Worker 	struct rnntypeinfo typeinfo;
205*61046927SAndroid Build Coastguard Worker 	struct rnnenum *index;   /* for arrays, for symbolic idx values */
206*61046927SAndroid Build Coastguard Worker 	char *fullname;
207*61046927SAndroid Build Coastguard Worker 	char *file;
208*61046927SAndroid Build Coastguard Worker };
209*61046927SAndroid Build Coastguard Worker 
210*61046927SAndroid Build Coastguard Worker struct rnnspectype {
211*61046927SAndroid Build Coastguard Worker 	char *name;
212*61046927SAndroid Build Coastguard Worker 	struct rnntypeinfo typeinfo;
213*61046927SAndroid Build Coastguard Worker 	char *file;
214*61046927SAndroid Build Coastguard Worker };
215*61046927SAndroid Build Coastguard Worker 
216*61046927SAndroid Build Coastguard Worker void rnn_init(void);
217*61046927SAndroid Build Coastguard Worker struct rnndb *rnn_newdb(void);
218*61046927SAndroid Build Coastguard Worker void rnn_parsefile (struct rnndb *db, char *file);
219*61046927SAndroid Build Coastguard Worker void rnn_prepdb (struct rnndb *db);
220*61046927SAndroid Build Coastguard Worker struct rnnenum *rnn_findenum (struct rnndb *db, const char *name);
221*61046927SAndroid Build Coastguard Worker struct rnnbitset *rnn_findbitset (struct rnndb *db, const char *name);
222*61046927SAndroid Build Coastguard Worker struct rnndomain *rnn_finddomain (struct rnndb *db, const char *name);
223*61046927SAndroid Build Coastguard Worker struct rnnspectype *rnn_findspectype (struct rnndb *db, const char *name);
224*61046927SAndroid Build Coastguard Worker 
225*61046927SAndroid Build Coastguard Worker #endif
226