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