xref: /aosp_15_r20/external/mesa3d/src/freedreno/rnn/util.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Copyright © 2010-2011 Marcin Kościelnicki <[email protected]>
3*61046927SAndroid Build Coastguard Worker  * Copyright © 2010 Francisco Jerez <[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 UTIL_H
9*61046927SAndroid Build Coastguard Worker #define UTIL_H
10*61046927SAndroid Build Coastguard Worker 
11*61046927SAndroid Build Coastguard Worker #include <stdlib.h>
12*61046927SAndroid Build Coastguard Worker #include <stdio.h>
13*61046927SAndroid Build Coastguard Worker #include <inttypes.h>
14*61046927SAndroid Build Coastguard Worker 
15*61046927SAndroid Build Coastguard Worker #define ADDARRAY(a, e) \
16*61046927SAndroid Build Coastguard Worker 	do { \
17*61046927SAndroid Build Coastguard Worker 	if ((a ## num) >= (a ## max)) { \
18*61046927SAndroid Build Coastguard Worker 		if (!(a ## max)) \
19*61046927SAndroid Build Coastguard Worker 			(a ## max) = 16; \
20*61046927SAndroid Build Coastguard Worker 		else \
21*61046927SAndroid Build Coastguard Worker 			(a ## max) *= 2; \
22*61046927SAndroid Build Coastguard Worker 		(a) = realloc((a), (a ## max)*sizeof(*(a))); \
23*61046927SAndroid Build Coastguard Worker 	} \
24*61046927SAndroid Build Coastguard Worker 	(a)[(a ## num)++] = (e); \
25*61046927SAndroid Build Coastguard Worker 	} while(0)
26*61046927SAndroid Build Coastguard Worker 
27*61046927SAndroid Build Coastguard Worker #define FINDARRAY(a, tmp, pred)				\
28*61046927SAndroid Build Coastguard Worker 	({							\
29*61046927SAndroid Build Coastguard Worker 		int __i;					\
30*61046927SAndroid Build Coastguard Worker 								\
31*61046927SAndroid Build Coastguard Worker 		for (__i = 0; __i < (a ## num); __i++) {	\
32*61046927SAndroid Build Coastguard Worker 			tmp = (a)[__i];				\
33*61046927SAndroid Build Coastguard Worker 			if (pred)				\
34*61046927SAndroid Build Coastguard Worker 				break;				\
35*61046927SAndroid Build Coastguard Worker 		}						\
36*61046927SAndroid Build Coastguard Worker 								\
37*61046927SAndroid Build Coastguard Worker 		tmp = ((pred) ? tmp : NULL);			\
38*61046927SAndroid Build Coastguard Worker 	})
39*61046927SAndroid Build Coastguard Worker 
40*61046927SAndroid Build Coastguard Worker /* ceil(log2(x)) */
clog2(uint64_t x)41*61046927SAndroid Build Coastguard Worker static inline int clog2(uint64_t x) {
42*61046927SAndroid Build Coastguard Worker 	if (!x)
43*61046927SAndroid Build Coastguard Worker 		return x;
44*61046927SAndroid Build Coastguard Worker 	int r = 0;
45*61046927SAndroid Build Coastguard Worker 	while (x - 1 > (1ull << r) - 1)
46*61046927SAndroid Build Coastguard Worker 		r++;
47*61046927SAndroid Build Coastguard Worker 	return r;
48*61046927SAndroid Build Coastguard Worker }
49*61046927SAndroid Build Coastguard Worker 
50*61046927SAndroid Build Coastguard Worker #define ARRAY_SIZE(a) (sizeof (a) / sizeof *(a))
51*61046927SAndroid Build Coastguard Worker 
52*61046927SAndroid Build Coastguard Worker #define min(a,b)				\
53*61046927SAndroid Build Coastguard Worker 	({					\
54*61046927SAndroid Build Coastguard Worker 		typeof (a) _a = (a);		\
55*61046927SAndroid Build Coastguard Worker 		typeof (b) _b = (b);		\
56*61046927SAndroid Build Coastguard Worker 		_a < _b ? _a : _b;		\
57*61046927SAndroid Build Coastguard Worker 	})
58*61046927SAndroid Build Coastguard Worker 
59*61046927SAndroid Build Coastguard Worker #define max(a,b)				\
60*61046927SAndroid Build Coastguard Worker 	({					\
61*61046927SAndroid Build Coastguard Worker 		typeof (a) _a = (a);		\
62*61046927SAndroid Build Coastguard Worker 		typeof (b) _b = (b);		\
63*61046927SAndroid Build Coastguard Worker 		_a > _b ? _a : _b;		\
64*61046927SAndroid Build Coastguard Worker 	})
65*61046927SAndroid Build Coastguard Worker 
66*61046927SAndroid Build Coastguard Worker #define CEILDIV(a, b) (((a) + (b) - 1)/(b))
67*61046927SAndroid Build Coastguard Worker 
68*61046927SAndroid Build Coastguard Worker #define extr(a, b, c) ((uint64_t)(a) << (64 - (b) - (c)) >> (64 - (c)))
69*61046927SAndroid Build Coastguard Worker #define extrs(a, b, c) ((int64_t)(a) << (64 - (b) - (c)) >> (64 - (c)))
70*61046927SAndroid Build Coastguard Worker #define sext(a, b) extrs(a, 0, b+1)
71*61046927SAndroid Build Coastguard Worker #define bflmask(a) ((2ull << ((a)-1)) - 1)
72*61046927SAndroid Build Coastguard Worker #define insrt(a, b, c, d) ((a) = ((a) & ~(bflmask(c) << (b))) | ((d) & bflmask(c)) << (b))
73*61046927SAndroid Build Coastguard Worker 
74*61046927SAndroid Build Coastguard Worker struct envy_loc {
75*61046927SAndroid Build Coastguard Worker 	int lstart;
76*61046927SAndroid Build Coastguard Worker 	int cstart;
77*61046927SAndroid Build Coastguard Worker 	int lend;
78*61046927SAndroid Build Coastguard Worker 	int cend;
79*61046927SAndroid Build Coastguard Worker 	const char *file;
80*61046927SAndroid Build Coastguard Worker };
81*61046927SAndroid Build Coastguard Worker 
82*61046927SAndroid Build Coastguard Worker #define LOC_FORMAT(loc, str) "%s:%d.%d-%d.%d: " str, (loc).file, (loc).lstart, (loc).cstart, (loc).lend, (loc).cend
83*61046927SAndroid Build Coastguard Worker 
84*61046927SAndroid Build Coastguard Worker uint32_t elf_hash(const char *str);
85*61046927SAndroid Build Coastguard Worker 
86*61046927SAndroid Build Coastguard Worker FILE *find_in_path(const char *name, const char *path, char **pfullname);
87*61046927SAndroid Build Coastguard Worker 
88*61046927SAndroid Build Coastguard Worker struct astr {
89*61046927SAndroid Build Coastguard Worker 	char *str;
90*61046927SAndroid Build Coastguard Worker 	size_t len;
91*61046927SAndroid Build Coastguard Worker };
92*61046927SAndroid Build Coastguard Worker 
93*61046927SAndroid Build Coastguard Worker void print_escaped_astr(FILE *out, struct astr *astr);
94*61046927SAndroid Build Coastguard Worker 
95*61046927SAndroid Build Coastguard Worker #endif
96