xref: /aosp_15_r20/external/mesa3d/src/freedreno/decode/util.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker  * Copyright © 2012-2018 Rob Clark <[email protected]>
3*61046927SAndroid Build Coastguard Worker  * SPDX-License-Identifier: MIT
4*61046927SAndroid Build Coastguard Worker  */
5*61046927SAndroid Build Coastguard Worker 
6*61046927SAndroid Build Coastguard Worker #ifndef __UTIL_H__
7*61046927SAndroid Build Coastguard Worker #define __UTIL_H__
8*61046927SAndroid Build Coastguard Worker 
9*61046927SAndroid Build Coastguard Worker #include <ctype.h>
10*61046927SAndroid Build Coastguard Worker #include <stdint.h>
11*61046927SAndroid Build Coastguard Worker #include <stdio.h>
12*61046927SAndroid Build Coastguard Worker 
13*61046927SAndroid Build Coastguard Worker #include "util/u_math.h"
14*61046927SAndroid Build Coastguard Worker 
15*61046927SAndroid Build Coastguard Worker /* old-style program binary XOR'd ascii w/ 0xff */
16*61046927SAndroid Build Coastguard Worker #ifndef ASCII_XOR
17*61046927SAndroid Build Coastguard Worker #define ASCII_XOR 0
18*61046927SAndroid Build Coastguard Worker #endif
19*61046927SAndroid Build Coastguard Worker 
20*61046927SAndroid Build Coastguard Worker static inline const char *
tab(int lvl)21*61046927SAndroid Build Coastguard Worker tab(int lvl)
22*61046927SAndroid Build Coastguard Worker {
23*61046927SAndroid Build Coastguard Worker    const char *TAB = "\t\t\t\t\t\t\t\t\0";
24*61046927SAndroid Build Coastguard Worker    return &TAB[strlen(TAB) - lvl];
25*61046927SAndroid Build Coastguard Worker }
26*61046927SAndroid Build Coastguard Worker 
27*61046927SAndroid Build Coastguard Worker static inline void
dump_hex(const void * buf,int sz)28*61046927SAndroid Build Coastguard Worker dump_hex(const void *buf, int sz)
29*61046927SAndroid Build Coastguard Worker {
30*61046927SAndroid Build Coastguard Worker    uint8_t *ptr = (uint8_t *)buf;
31*61046927SAndroid Build Coastguard Worker    uint8_t *end = ptr + sz;
32*61046927SAndroid Build Coastguard Worker    int i = 0;
33*61046927SAndroid Build Coastguard Worker 
34*61046927SAndroid Build Coastguard Worker    while (ptr < end) {
35*61046927SAndroid Build Coastguard Worker       uint32_t d = 0;
36*61046927SAndroid Build Coastguard Worker 
37*61046927SAndroid Build Coastguard Worker       printf((i % 8) ? " " : "\t");
38*61046927SAndroid Build Coastguard Worker 
39*61046927SAndroid Build Coastguard Worker       d |= *(ptr++) << 0;
40*61046927SAndroid Build Coastguard Worker       d |= *(ptr++) << 8;
41*61046927SAndroid Build Coastguard Worker       d |= *(ptr++) << 16;
42*61046927SAndroid Build Coastguard Worker       d |= (uint32_t)*(ptr++) << 24;
43*61046927SAndroid Build Coastguard Worker 
44*61046927SAndroid Build Coastguard Worker       printf("%08x", d);
45*61046927SAndroid Build Coastguard Worker 
46*61046927SAndroid Build Coastguard Worker       if ((i % 8) == 7) {
47*61046927SAndroid Build Coastguard Worker          printf("\n");
48*61046927SAndroid Build Coastguard Worker       }
49*61046927SAndroid Build Coastguard Worker 
50*61046927SAndroid Build Coastguard Worker       i++;
51*61046927SAndroid Build Coastguard Worker    }
52*61046927SAndroid Build Coastguard Worker 
53*61046927SAndroid Build Coastguard Worker    if (i % 8) {
54*61046927SAndroid Build Coastguard Worker       printf("\n");
55*61046927SAndroid Build Coastguard Worker    }
56*61046927SAndroid Build Coastguard Worker }
57*61046927SAndroid Build Coastguard Worker 
58*61046927SAndroid Build Coastguard Worker static inline void
dump_float(const void * buf,int sz)59*61046927SAndroid Build Coastguard Worker dump_float(const void *buf, int sz)
60*61046927SAndroid Build Coastguard Worker {
61*61046927SAndroid Build Coastguard Worker    uint8_t *ptr = (uint8_t *)buf;
62*61046927SAndroid Build Coastguard Worker    uint8_t *end = ptr + sz - 3;
63*61046927SAndroid Build Coastguard Worker    int i = 0;
64*61046927SAndroid Build Coastguard Worker 
65*61046927SAndroid Build Coastguard Worker    while (ptr < end) {
66*61046927SAndroid Build Coastguard Worker       uint32_t d = 0;
67*61046927SAndroid Build Coastguard Worker 
68*61046927SAndroid Build Coastguard Worker       printf((i % 8) ? " " : "\t");
69*61046927SAndroid Build Coastguard Worker 
70*61046927SAndroid Build Coastguard Worker       d |= *(ptr++) << 0;
71*61046927SAndroid Build Coastguard Worker       d |= *(ptr++) << 8;
72*61046927SAndroid Build Coastguard Worker       d |= *(ptr++) << 16;
73*61046927SAndroid Build Coastguard Worker       d |= (uint32_t)*(ptr++) << 24;
74*61046927SAndroid Build Coastguard Worker 
75*61046927SAndroid Build Coastguard Worker       printf("%8f", uif(d));
76*61046927SAndroid Build Coastguard Worker 
77*61046927SAndroid Build Coastguard Worker       if ((i % 8) == 7) {
78*61046927SAndroid Build Coastguard Worker          printf("\n");
79*61046927SAndroid Build Coastguard Worker       }
80*61046927SAndroid Build Coastguard Worker 
81*61046927SAndroid Build Coastguard Worker       i++;
82*61046927SAndroid Build Coastguard Worker    }
83*61046927SAndroid Build Coastguard Worker 
84*61046927SAndroid Build Coastguard Worker    if (i % 8) {
85*61046927SAndroid Build Coastguard Worker       printf("\n");
86*61046927SAndroid Build Coastguard Worker    }
87*61046927SAndroid Build Coastguard Worker }
88*61046927SAndroid Build Coastguard Worker 
89*61046927SAndroid Build Coastguard Worker #define is_ok_ascii(c) (isascii(c) && ((c == '\t') || !iscntrl(c)))
90*61046927SAndroid Build Coastguard Worker 
91*61046927SAndroid Build Coastguard Worker static inline void
clean_ascii(char * buf,int sz)92*61046927SAndroid Build Coastguard Worker clean_ascii(char *buf, int sz)
93*61046927SAndroid Build Coastguard Worker {
94*61046927SAndroid Build Coastguard Worker    uint8_t *ptr = (uint8_t *)buf;
95*61046927SAndroid Build Coastguard Worker    uint8_t *end = ptr + sz;
96*61046927SAndroid Build Coastguard Worker    while (ptr < end) {
97*61046927SAndroid Build Coastguard Worker       *(ptr++) ^= ASCII_XOR;
98*61046927SAndroid Build Coastguard Worker    }
99*61046927SAndroid Build Coastguard Worker }
100*61046927SAndroid Build Coastguard Worker 
101*61046927SAndroid Build Coastguard Worker static inline void
dump_ascii(const void * buf,int sz)102*61046927SAndroid Build Coastguard Worker dump_ascii(const void *buf, int sz)
103*61046927SAndroid Build Coastguard Worker {
104*61046927SAndroid Build Coastguard Worker    uint8_t *ptr = (uint8_t *)buf;
105*61046927SAndroid Build Coastguard Worker    uint8_t *end = ptr + sz;
106*61046927SAndroid Build Coastguard Worker    printf("\t");
107*61046927SAndroid Build Coastguard Worker    while (ptr < end) {
108*61046927SAndroid Build Coastguard Worker       uint8_t c = *(ptr++) ^ ASCII_XOR;
109*61046927SAndroid Build Coastguard Worker       if (c == '\n') {
110*61046927SAndroid Build Coastguard Worker          printf("\n\t");
111*61046927SAndroid Build Coastguard Worker       } else if (c == '\0') {
112*61046927SAndroid Build Coastguard Worker          printf("\n\t-----------------------------------\n\t");
113*61046927SAndroid Build Coastguard Worker       } else if (is_ok_ascii(c)) {
114*61046927SAndroid Build Coastguard Worker          printf("%c", c);
115*61046927SAndroid Build Coastguard Worker       } else {
116*61046927SAndroid Build Coastguard Worker          printf("?");
117*61046927SAndroid Build Coastguard Worker       }
118*61046927SAndroid Build Coastguard Worker    }
119*61046927SAndroid Build Coastguard Worker    printf("\n");
120*61046927SAndroid Build Coastguard Worker }
121*61046927SAndroid Build Coastguard Worker 
122*61046927SAndroid Build Coastguard Worker static inline void
dump_hex_ascii(const void * buf,int sz,int level)123*61046927SAndroid Build Coastguard Worker dump_hex_ascii(const void *buf, int sz, int level)
124*61046927SAndroid Build Coastguard Worker {
125*61046927SAndroid Build Coastguard Worker    uint8_t *ptr = (uint8_t *)buf;
126*61046927SAndroid Build Coastguard Worker    uint8_t *end = ptr + sz;
127*61046927SAndroid Build Coastguard Worker    uint8_t *ascii = ptr;
128*61046927SAndroid Build Coastguard Worker    int i = 0;
129*61046927SAndroid Build Coastguard Worker 
130*61046927SAndroid Build Coastguard Worker    printf("%s-----------------------------------------------\n", tab(level));
131*61046927SAndroid Build Coastguard Worker    printf("%s%d (0x%x) bytes\n", tab(level), sz, sz);
132*61046927SAndroid Build Coastguard Worker 
133*61046927SAndroid Build Coastguard Worker    while (ptr < end) {
134*61046927SAndroid Build Coastguard Worker       uint32_t d = 0;
135*61046927SAndroid Build Coastguard Worker 
136*61046927SAndroid Build Coastguard Worker       if (i % 4) {
137*61046927SAndroid Build Coastguard Worker          printf(" ");
138*61046927SAndroid Build Coastguard Worker       } else {
139*61046927SAndroid Build Coastguard Worker          printf("%s%06x: ", tab(level), (uint32_t)(ptr - (uint8_t *)buf));
140*61046927SAndroid Build Coastguard Worker       }
141*61046927SAndroid Build Coastguard Worker 
142*61046927SAndroid Build Coastguard Worker       d |= *(ptr++) << 0;
143*61046927SAndroid Build Coastguard Worker       d |= *(ptr++) << 8;
144*61046927SAndroid Build Coastguard Worker       d |= *(ptr++) << 16;
145*61046927SAndroid Build Coastguard Worker       d |= (uint32_t)*(ptr++) << 24;
146*61046927SAndroid Build Coastguard Worker 
147*61046927SAndroid Build Coastguard Worker       printf("%08x", d);
148*61046927SAndroid Build Coastguard Worker 
149*61046927SAndroid Build Coastguard Worker       if ((i % 4) == 3) {
150*61046927SAndroid Build Coastguard Worker          int j;
151*61046927SAndroid Build Coastguard Worker          printf("\t|");
152*61046927SAndroid Build Coastguard Worker          for (j = 0; j < 16; j++) {
153*61046927SAndroid Build Coastguard Worker             uint8_t c = *(ascii++);
154*61046927SAndroid Build Coastguard Worker             c ^= ASCII_XOR;
155*61046927SAndroid Build Coastguard Worker             printf("%c", (isascii(c) && !iscntrl(c)) ? c : '.');
156*61046927SAndroid Build Coastguard Worker          }
157*61046927SAndroid Build Coastguard Worker          printf("|\n");
158*61046927SAndroid Build Coastguard Worker       }
159*61046927SAndroid Build Coastguard Worker 
160*61046927SAndroid Build Coastguard Worker       i++;
161*61046927SAndroid Build Coastguard Worker    }
162*61046927SAndroid Build Coastguard Worker 
163*61046927SAndroid Build Coastguard Worker    if (i % 4) {
164*61046927SAndroid Build Coastguard Worker       for (int j = 4 - (i % 4); j > 0; j--) {
165*61046927SAndroid Build Coastguard Worker          printf("         ");
166*61046927SAndroid Build Coastguard Worker       }
167*61046927SAndroid Build Coastguard Worker       printf("\t|");
168*61046927SAndroid Build Coastguard Worker       while (ascii < end) {
169*61046927SAndroid Build Coastguard Worker          uint8_t c = *(ascii++);
170*61046927SAndroid Build Coastguard Worker          c ^= ASCII_XOR;
171*61046927SAndroid Build Coastguard Worker          printf("%c", (isascii(c) && !iscntrl(c)) ? c : '.');
172*61046927SAndroid Build Coastguard Worker       }
173*61046927SAndroid Build Coastguard Worker       printf("|\n");
174*61046927SAndroid Build Coastguard Worker    }
175*61046927SAndroid Build Coastguard Worker }
176*61046927SAndroid Build Coastguard Worker 
177*61046927SAndroid Build Coastguard Worker #endif /* __UTIL_H__ */
178