xref: /third_party/mesa3d/src/freedreno/rnn/rnn.h (revision bf215546)
1/*
2 * Copyright (C) 2010 Marcin Kościelnicki <koriakin@0x04.net>
3 * Copyright (C) 2010 Luca Barbieri <luca@luca-barbieri.com>
4 * All Rights Reserved.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice (including the next
14 * paragraph) shall be included in all copies or substantial portions of the
15 * Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
20 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
21 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23 * OTHER DEALINGS IN THE SOFTWARE.
24 */
25
26#ifndef RNN_H
27#define RNN_H
28
29#include <stdint.h>
30#include <stdlib.h>
31
32struct rnnauthor {
33	char* name;
34	char* email;
35	char* contributions;
36	char* license;
37	char** nicknames;
38	int nicknamesnum;
39	int nicknamesmax;
40};
41
42struct rnncopyright {
43	unsigned firstyear;
44	char* license;
45	struct rnnauthor **authors;
46	int authorsnum;
47	int authorsmax;
48};
49
50struct rnndb {
51	struct rnncopyright copyright;
52	struct rnnenum **enums;
53	int enumsnum;
54	int enumsmax;
55	struct rnnbitset **bitsets;
56	int bitsetsnum;
57	int bitsetsmax;
58	struct rnndomain **domains;
59	int domainsnum;
60	int domainsmax;
61	struct rnngroup **groups;
62	int groupsnum;
63	int groupsmax;
64	struct rnnspectype **spectypes;
65	int spectypesnum;
66	int spectypesmax;
67	char **files;
68	int filesnum;
69	int filesmax;
70	int estatus;
71};
72
73struct rnnvarset {
74	struct rnnenum *venum;
75	int *variants;
76};
77
78struct rnnvarinfo {
79	char *prefixstr;
80	char *varsetstr;
81	char *variantsstr;
82	int dead;
83	struct rnnenum *prefenum;
84	char *prefix;
85	struct rnnvarset **varsets;
86	int varsetsnum;
87	int varsetsmax;
88};
89
90struct rnnenum {
91	char *name;
92	int bare;
93	int isinline;
94	struct rnnvarinfo varinfo;
95	struct rnnvalue **vals;
96	int valsnum;
97	int valsmax;
98	char *fullname;
99	int prepared;
100	char *file;
101};
102
103struct rnnvalue {
104	char *name;
105	int valvalid;
106	uint64_t value;
107	struct rnnvarinfo varinfo;
108	char *fullname;
109	char *file;
110};
111
112struct rnntypeinfo {
113	char *name;
114	enum rnnttype {
115		RNN_TTYPE_INVALID,
116		RNN_TTYPE_INLINE_ENUM,
117		RNN_TTYPE_INLINE_BITSET,
118		RNN_TTYPE_ENUM,
119		RNN_TTYPE_BITSET,
120		RNN_TTYPE_SPECTYPE,
121		RNN_TTYPE_HEX,
122		RNN_TTYPE_INT,
123		RNN_TTYPE_UINT,
124		RNN_TTYPE_FLOAT,
125		RNN_TTYPE_BOOLEAN,
126		RNN_TTYPE_FIXED,
127		RNN_TTYPE_UFIXED,
128		RNN_TTYPE_A3XX_REGID,
129	} type;
130	struct rnnenum *eenum;
131	struct rnnbitset *ebitset;
132	struct rnnspectype *spectype;
133	struct rnnbitfield **bitfields;
134	int bitfieldsnum;
135	int bitfieldsmax;
136	struct rnnvalue **vals;
137	int valsnum;
138	int valsmax;
139	int shr, low, high;
140	uint64_t min, max, align, radix;
141	int addvariant;
142	int minvalid, maxvalid, alignvalid, radixvalid;
143};
144
145static inline uint64_t typeinfo_mask(struct rnntypeinfo *ti)
146{
147	if (ti->high == 63)
148		return -(1ULL << ti->low);
149	else
150		return (1ULL << (ti->high + 1)) - (1ULL << ti->low);
151}
152
153struct rnnbitset {
154	char *name;
155	int bare;
156	int isinline;
157	struct rnnvarinfo varinfo;
158	struct rnnbitfield **bitfields;
159	int bitfieldsnum;
160	int bitfieldsmax;
161	char *fullname;
162	char *file;
163};
164
165struct rnnbitfield {
166	char *name;
167	struct rnnvarinfo varinfo;
168	struct rnntypeinfo typeinfo;
169	char *fullname;
170	char *file;
171};
172
173struct rnndomain {
174	char *name;
175	int bare;
176	int width;
177	uint64_t size;
178	int sizevalid;
179	struct rnnvarinfo varinfo;
180	struct rnndelem **subelems;
181	int subelemsnum;
182	int subelemsmax;
183	char *fullname;
184	char *file;
185};
186
187struct rnngroup {
188	char *name;
189	struct rnndelem **subelems;
190	int subelemsnum;
191	int subelemsmax;
192};
193
194struct rnndelem {
195	enum rnnetype {
196		RNN_ETYPE_REG,
197		RNN_ETYPE_ARRAY,
198		RNN_ETYPE_STRIPE,
199		RNN_ETYPE_USE_GROUP,
200	} type;
201	char *name;
202	int width;
203	enum rnnaccess {
204		RNN_ACCESS_R,
205		RNN_ACCESS_W,
206		RNN_ACCESS_RW,
207	} access;
208	uint64_t offset;
209	uint64_t *offsets;       /* for "array" with irregular offsets */
210	int offsetsnum;
211	int offsetsmax;
212	char *doffset;
213	char **doffsets;
214	int doffsetsnum;
215	int doffsetsmax;
216	uint64_t length;
217	uint64_t stride;
218	struct rnndelem **subelems;
219	int subelemsnum;
220	int subelemsmax;
221	struct rnnvarinfo varinfo;
222	struct rnntypeinfo typeinfo;
223	struct rnnenum *index;   /* for arrays, for symbolic idx values */
224	char *fullname;
225	char *file;
226};
227
228struct rnnspectype {
229	char *name;
230	struct rnntypeinfo typeinfo;
231	char *file;
232};
233
234void rnn_init(void);
235struct rnndb *rnn_newdb(void);
236void rnn_parsefile (struct rnndb *db, char *file);
237void rnn_prepdb (struct rnndb *db);
238struct rnnenum *rnn_findenum (struct rnndb *db, const char *name);
239struct rnnbitset *rnn_findbitset (struct rnndb *db, const char *name);
240struct rnndomain *rnn_finddomain (struct rnndb *db, const char *name);
241struct rnnspectype *rnn_findspectype (struct rnndb *db, const char *name);
242
243#endif
244