~mmach/netext73/mesa-haswell

« back to all changes in this revision

Viewing changes to src/freedreno/decode/util.h

  • Committer: mmach
  • Date: 2022-09-22 19:56:13 UTC
  • Revision ID: netbit73@gmail.com-20220922195613-wtik9mmy20tmor0i
2022-09-22 21:17:09

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 * Copyright (c) 2012-2018 Rob Clark <robdclark@gmail.com>
3
 
 *
4
 
 * Permission is hereby granted, free of charge, to any person obtaining a
5
 
 * copy of this software and associated documentation files (the "Software"),
6
 
 * to deal in the Software without restriction, including without limitation
7
 
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8
 
 * and/or sell copies of the Software, and to permit persons to whom the
9
 
 * Software is furnished to do so, subject to the following conditions:
10
 
 *
11
 
 * The above copyright notice and this permission notice (including the next
12
 
 * paragraph) shall be included in all copies or substantial portions of the
13
 
 * Software.
14
 
 *
15
 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
 
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
 
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18
 
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
 
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
 
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
 
 * SOFTWARE.
22
 
 */
23
 
 
24
 
#ifndef __UTIL_H__
25
 
#define __UTIL_H__
26
 
 
27
 
#include <ctype.h>
28
 
#include <stdint.h>
29
 
#include <stdio.h>
30
 
 
31
 
#include "util/u_math.h"
32
 
 
33
 
/* old-style program binary XOR'd ascii w/ 0xff */
34
 
#ifndef ASCII_XOR
35
 
#define ASCII_XOR 0
36
 
#endif
37
 
 
38
 
static inline const char *
39
 
tab(int lvl)
40
 
{
41
 
   const char *TAB = "\t\t\t\t\t\t\t\t\0";
42
 
   return &TAB[strlen(TAB) - lvl];
43
 
}
44
 
 
45
 
static inline void
46
 
dump_hex(const void *buf, int sz)
47
 
{
48
 
   uint8_t *ptr = (uint8_t *)buf;
49
 
   uint8_t *end = ptr + sz;
50
 
   int i = 0;
51
 
 
52
 
   while (ptr < end) {
53
 
      uint32_t d = 0;
54
 
 
55
 
      printf((i % 8) ? " " : "\t");
56
 
 
57
 
      d |= *(ptr++) << 0;
58
 
      d |= *(ptr++) << 8;
59
 
      d |= *(ptr++) << 16;
60
 
      d |= (uint32_t)*(ptr++) << 24;
61
 
 
62
 
      printf("%08x", d);
63
 
 
64
 
      if ((i % 8) == 7) {
65
 
         printf("\n");
66
 
      }
67
 
 
68
 
      i++;
69
 
   }
70
 
 
71
 
   if (i % 8) {
72
 
      printf("\n");
73
 
   }
74
 
}
75
 
 
76
 
static inline void
77
 
dump_float(const void *buf, int sz)
78
 
{
79
 
   uint8_t *ptr = (uint8_t *)buf;
80
 
   uint8_t *end = ptr + sz - 3;
81
 
   int i = 0;
82
 
 
83
 
   while (ptr < end) {
84
 
      uint32_t d = 0;
85
 
 
86
 
      printf((i % 8) ? " " : "\t");
87
 
 
88
 
      d |= *(ptr++) << 0;
89
 
      d |= *(ptr++) << 8;
90
 
      d |= *(ptr++) << 16;
91
 
      d |= (uint32_t)*(ptr++) << 24;
92
 
 
93
 
      printf("%8f", uif(d));
94
 
 
95
 
      if ((i % 8) == 7) {
96
 
         printf("\n");
97
 
      }
98
 
 
99
 
      i++;
100
 
   }
101
 
 
102
 
   if (i % 8) {
103
 
      printf("\n");
104
 
   }
105
 
}
106
 
 
107
 
#define is_ok_ascii(c) (isascii(c) && ((c == '\t') || !iscntrl(c)))
108
 
 
109
 
static inline void
110
 
clean_ascii(char *buf, int sz)
111
 
{
112
 
   uint8_t *ptr = (uint8_t *)buf;
113
 
   uint8_t *end = ptr + sz;
114
 
   while (ptr < end) {
115
 
      *(ptr++) ^= ASCII_XOR;
116
 
   }
117
 
}
118
 
 
119
 
static inline void
120
 
dump_ascii(const void *buf, int sz)
121
 
{
122
 
   uint8_t *ptr = (uint8_t *)buf;
123
 
   uint8_t *end = ptr + sz;
124
 
   printf("\t");
125
 
   while (ptr < end) {
126
 
      uint8_t c = *(ptr++) ^ ASCII_XOR;
127
 
      if (c == '\n') {
128
 
         printf("\n\t");
129
 
      } else if (c == '\0') {
130
 
         printf("\n\t-----------------------------------\n\t");
131
 
      } else if (is_ok_ascii(c)) {
132
 
         printf("%c", c);
133
 
      } else {
134
 
         printf("?");
135
 
      }
136
 
   }
137
 
   printf("\n");
138
 
}
139
 
 
140
 
static inline void
141
 
dump_hex_ascii(const void *buf, int sz, int level)
142
 
{
143
 
   uint8_t *ptr = (uint8_t *)buf;
144
 
   uint8_t *end = ptr + sz;
145
 
   uint8_t *ascii = ptr;
146
 
   int i = 0;
147
 
 
148
 
   printf("%s-----------------------------------------------\n", tab(level));
149
 
   printf("%s%d (0x%x) bytes\n", tab(level), sz, sz);
150
 
 
151
 
   while (ptr < end) {
152
 
      uint32_t d = 0;
153
 
 
154
 
      if (i % 4) {
155
 
         printf(" ");
156
 
      } else {
157
 
         printf("%s%06x: ", tab(level), (uint32_t)(ptr - (uint8_t *)buf));
158
 
      }
159
 
 
160
 
      d |= *(ptr++) << 0;
161
 
      d |= *(ptr++) << 8;
162
 
      d |= *(ptr++) << 16;
163
 
      d |= (uint32_t)*(ptr++) << 24;
164
 
 
165
 
      printf("%08x", d);
166
 
 
167
 
      if ((i % 4) == 3) {
168
 
         int j;
169
 
         printf("\t|");
170
 
         for (j = 0; j < 16; j++) {
171
 
            uint8_t c = *(ascii++);
172
 
            c ^= ASCII_XOR;
173
 
            printf("%c", (isascii(c) && !iscntrl(c)) ? c : '.');
174
 
         }
175
 
         printf("|\n");
176
 
      }
177
 
 
178
 
      i++;
179
 
   }
180
 
 
181
 
   if (i % 4) {
182
 
      for (int j = 4 - (i % 4); j > 0; j--) {
183
 
         printf("         ");
184
 
      }
185
 
      printf("\t|");
186
 
      while (ascii < end) {
187
 
         uint8_t c = *(ascii++);
188
 
         c ^= ASCII_XOR;
189
 
         printf("%c", (isascii(c) && !iscntrl(c)) ? c : '.');
190
 
      }
191
 
      printf("|\n");
192
 
   }
193
 
}
194
 
 
195
 
#endif /* __UTIL_H__ */