Initial commit of OpenSPARC T2 architecture model.
[OpenSPARC-T2-SAM] / rst / rstf / rstf_convert.h
CommitLineData
920dae64
AT
1/*
2* ========== Copyright Header Begin ==========================================
3*
4* OpenSPARC T2 Processor File: rstf_convert.h
5* Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
6* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES.
7*
8* The above named program is free software; you can redistribute it and/or
9* modify it under the terms of the GNU General Public
10* License version 2 as published by the Free Software Foundation.
11*
12* The above named program is distributed in the hope that it will be
13* useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
14* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15* General Public License for more details.
16*
17* You should have received a copy of the GNU General Public
18* License along with this work; if not, write to the Free Software
19* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
20*
21* ========== Copyright Header End ============================================
22*/
23#ifndef _rstf_convert_h
24#define _rstf_convert_h
25
26#include "rstf.h"
27#include "byteswap.h"
28
29class rstf_convertT {
30public:
31 static void l2b(rstf_uint8T *t)
32 {
33 int i;
34 uint8_t bytes[sizeof(rstf_protoT)/sizeof(uint8_t)], b;
35 switch (t->arr8[0]) {
36 case INSTR_T:
37 b = t->arr8[1];
38 t->arr8[1] = (b << 7) | ((b & 2) << 5) | ((b & 4) << 3) |
39 ((b & 8) << 1) | ((b & 0x10) >> 1) | ((b & 0x20) >> 3) |
40 ((b & 0x40) >> 5) | (b >> 7);
41 bytes[2] = t->arr8[3];
42 bytes[3] = t->arr8[2];
43 t->arr8[2] = (bytes[3] << 2) | (bytes[2] & 3);
44 t->arr8[3] = (bytes[3] & 0xc0);
45 *(uint32_t *)(&t->arr8[4]) = byteswap32(*(uint32_t *)(&t->arr8[4]));
46 *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8]));
47 *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16]));
48 break;
49 case TRACEINFO_T:
50 switch (t->arr8[1]) {
51 case RSTT2_NLEVEL_T:
52 *(uint16_t *)(&t->arr8[2]) = byteswap16(*(uint16_t *)(&t->arr8[2]));
53 *(uint32_t *)(&t->arr8[4]) = byteswap32(*(uint32_t *)(&t->arr8[4]));
54 *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8]));
55 break;
56 case RSTT2_CPUINFO_T:
57 *(uint16_t *)(&t->arr8[2]) = byteswap16(*(uint16_t *)(&t->arr8[2]));
58 *(uint16_t *)(&t->arr8[4]) = byteswap16(*(uint16_t *)(&t->arr8[4]));
59 *(uint16_t *)(&t->arr8[6]) = byteswap16(*(uint16_t *)(&t->arr8[6]));
60 break;
61 case RSTT2_CPUIDINFO_T:
62 for (i=4; i<24; i+=2)
63 *(uint16_t *)(&t->arr8[i]) = byteswap16(*(uint16_t *)(&t->arr8[i]));
64 break;
65 }
66 break;
67 case TLB_T:
68 b = t->arr8[1];
69 t->arr8[1] = (b << 7) | ((b & 2) << 5);
70 *(uint16_t *)(&t->arr8[2]) = byteswap16(*(uint16_t *)(&t->arr8[2]));
71 t->arr8[4] = (t->arr8[4] >> 2) | (t->arr8[4] << 6);
72 t->arr8[5] = (t->arr8[5] << 4);
73 *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8]));
74 *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16]));
75 break;
76 case THREAD_T:
77 *(uint16_t *)(&t->arr8[2]) = byteswap16(*(uint16_t *)(&t->arr8[2]));
78 *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8]));
79 break;
80 case TRAP_T:
81 t->arr8[1] = (t->arr8[1] << 7) | (t->arr8[1] >> 4);
82 bytes[2] = t->arr8[3];
83 bytes[3] = t->arr8[2];
84 t->arr8[2] = (bytes[3] << 2) | (bytes[2] >> 6);
85 t->arr8[3] = (bytes[2] << 2) | (bytes[3] >> 6);
86 *(uint16_t *)(&t->arr8[4]) = byteswap16(*(uint16_t *)(&t->arr8[4]));
87 bytes[6] = t->arr8[7];
88 bytes[7] = t->arr8[6];
89 t->arr8[6] = (bytes[7] << 4) | (bytes[6] >> 4);
90 t->arr8[7] = (bytes[6] << 4) | (bytes[7] >> 4);
91 *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8]));
92 *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16]));
93 break;
94 case TRAPEXIT_T:
95 bytes[2] = t->arr8[3];
96 bytes[3] = t->arr8[2];
97 t->arr8[2] = (bytes[3] << 2) | (bytes[2] & 3);
98 t->arr8[3] = (bytes[3] & 0xc0);
99 *(uint32_t *)(&t->arr8[4]) = byteswap32(*(uint32_t *)(&t->arr8[4]));
100 break;
101 case REGVAL_T:
102 t->arr8[1] = (t->arr8[1] << 7) | (t->arr8[1] >> 1);
103 bytes[6] = t->arr8[7];
104 bytes[7] = t->arr8[6];
105 t->arr8[6] = bytes[7] << 5;
106 t->arr8[7] = 0;
107 *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8]));
108 *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16]));
109 break;
110 case CPU_T:
111 *(uint16_t *)(&t->arr8[6]) = byteswap16(*(uint16_t *)(&t->arr8[6]));
112 *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16]));
113 break;
114 case PROCESS_T:
115 *(uint32_t *)(&t->arr8[8]) = byteswap32(*(uint32_t *)(&t->arr8[8]));
116 *(uint32_t *)(&t->arr8[12]) = byteswap32(*(uint32_t *)(&t->arr8[12]));
117 *(uint32_t *)(&t->arr8[16]) = byteswap32(*(uint32_t *)(&t->arr8[16]));
118 *(uint32_t *)(&t->arr8[20]) = byteswap32(*(uint32_t *)(&t->arr8[20]));
119 break;
120 case DMA_T:
121 t->arr8[1] = t->arr8[1] >> 7;
122 *(uint32_t *)(&t->arr8[4]) = byteswap32(*(uint32_t *)(&t->arr8[4]));
123 *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8]));
124 break;
125 case LEFTDELIM_T:
126 case RIGHTDELIM_T:
127 *(uint16_t *)(&t->arr8[2]) = byteswap16(*(uint16_t *)(&t->arr8[2]));
128 *(uint32_t *)(&t->arr8[4]) = byteswap32(*(uint32_t *)(&t->arr8[4]));
129 break;
130 case PREG_T:
131 *(uint16_t *)(&t->arr8[2]) = byteswap16(*(uint16_t *)(&t->arr8[2]));
132 *(uint16_t *)(&t->arr8[6]) = byteswap16(*(uint16_t *)(&t->arr8[6]));
133 t->arr8[9] = t->arr8[9] << 6;
134 *(uint16_t *)(&t->arr8[16]) = byteswap16(*(uint16_t *)(&t->arr8[16]));
135 *(uint16_t *)(&t->arr8[18]) = byteswap16(*(uint16_t *)(&t->arr8[18]));
136 *(uint16_t *)(&t->arr8[20]) = byteswap16(*(uint16_t *)(&t->arr8[20]));
137 *(uint16_t *)(&t->arr8[22]) = byteswap16(*(uint16_t *)(&t->arr8[22]));
138 break;
139 case PHYSADDR_T:
140 t->arr8[1] = (t->arr8[1] << 7) | (t->arr8[1] >> 1);
141 bytes[2] = t->arr8[3];
142 bytes[3] = t->arr8[2];
143 t->arr8[2] = (bytes[3] << 5);
144 t->arr8[3] = 0;
145 *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8]));
146 *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16]));
147 break;
148 case PAVADIFF_T:
149 t->arr8[1] = (t->arr8[1] << 7) | (t->arr8[1] >> 1);
150 t->arr8[2] = (t->arr8[2] << 5);
151 t->arr8[3] = 0;
152 *(uint16_t *)(&t->arr8[4]) = byteswap16(*(uint16_t *)(&t->arr8[4]));
153 *(uint16_t *)(&t->arr8[6]) = byteswap16(*(uint16_t *)(&t->arr8[6]));
154 *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8]));
155 *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16]));
156 break;
157 case FILEMARKER_T:
158 t->arr8[1] = (t->arr8[1] << 7) | (t->arr8[1] >> 1);
159 t->arr8[4] = (t->arr8[4] << 6);
160 t->arr8[5] = t->arr8[6] = t->arr8[7] = 0;
161 *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8]));
162 *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16]));
163 break;
164 case PATCH_T:
165 t->arr8[1] = (t->arr8[1] >> 7);
166 *(uint16_t *)(&t->arr8[4]) = byteswap16(*(uint16_t *)(&t->arr8[4]));
167 break;
168 case HWINFO_T:
169 t->arr8[1] = (t->arr8[1] << 7);
170 *(uint16_t *)(&t->arr8[4]) = byteswap16(*(uint16_t *)(&t->arr8[4]));
171 *(uint16_t *)(&t->arr8[6]) = byteswap16(*(uint16_t *)(&t->arr8[6]));
172 *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8]));
173 *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16]));
174 break;
175 case MEMVAL_T:
176 b = t->arr8[1];
177 t->arr8[1] = (b << 7) | ((b&2) << 5) | ((b&4) << 3) | (b >> 6);
178 if (t->arr8[1] & 0x80) { /* ismemval128 */
179 *(uint32_t *)(&t->arr8[4]) = byteswap32(*(uint32_t *)(&t->arr8[4]));
180 }
181 else { /* ismemval64 */
182 t->arr8[3] = (t->arr8[3] >> 4);
183 }
184 *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8]));
185 *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16]));
186 break;
187 case BUSTRACE_T:
188 b = t->arr8[1];
189 t->arr8[1] = (b << 7) | ((b&2) << 5) | ((b&4) << 3) | ((b&8) << 1) |
190 (b >> 4);
191 bytes[2] = t->arr8[3];
192 bytes[3] = t->arr8[2];
193 t->arr8[2] = (bytes[3] << 2) | (bytes[2] >> 6);
194 t->arr8[3] = (bytes[2] << 2) | (bytes[3] >> 6);
195 bytes[5] = t->arr8[6];
196 bytes[6] = t->arr8[5];
197 bytes[7] = t->arr8[4];
198 t->arr8[4] = (bytes[7] << 7) | ((bytes[7]&2) << 5) | (bytes[5] & 0x3f);
199 t->arr8[5] = bytes[6];
200 t->arr8[6] = (bytes[7] & 0xfc);
201 t->arr8[7] = 0;
202 *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8]));
203 *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16]));
204 break;
205 case SNOOP_T:
206 *(uint16_t *)(&t->arr8[2]) = byteswap16(*(uint16_t *)(&t->arr8[2]));
207 *(uint32_t *)(&t->arr8[4]) = byteswap32(*(uint32_t *)(&t->arr8[4]));
208 *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8]));
209 *(uint16_t *)(&t->arr8[16]) = byteswap16(*(uint16_t *)(&t->arr8[16]));
210 break;
211 case TSB_ACCESS_T:
212 t->arr8[1] = (t->arr8[1] >> 7);
213 bytes[2] = t->arr8[3];
214 bytes[3] = t->arr8[2];
215 t->arr8[2] = (bytes[2] >> 6);
216 t->arr8[3] = (bytes[2] << 2) | (bytes[3] >> 6);
217 *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8]));
218 *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16]));
219 break;
220 case RFS_SECTION_HEADER_T:
221 *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8]));
222 break;
223 case RFS_CW_T:
224 bytes[1] = t->arr8[2];
225 bytes[2] = t->arr8[1];
226 t->arr8[1] = (bytes[1] << 6) | (bytes[2] >> 2);
227 t->arr8[2] = (bytes[2] << 6) | (bytes[1] >> 2);
228 switch (t->arr8[2] & 0x3f) {
229 case cw_reftype_DMA_R:
230 case cw_reftype_DMA_W:
231 *(uint32_t *)(&t->arr8[4]) = byteswap32(*(uint32_t *)(&t->arr8[4]));
232 break;
233 default:
234 t->arr8[5] = (t->arr8[5] << 7) | ((t->arr8[5] & 0x3e) << 1);
235 t->arr8[6] = 0;
236 t->arr8[7] = 0;
237 break;
238 }
239 *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8]));
240 *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16]));
241 break;
242 case RFS_BT_T:
243 bytes[2] = t->arr8[2];
244 bytes[3] = t->arr8[1];
245 t->arr8[1] = (bytes[2] << 6) | (bytes[3] >> 2);
246 t->arr8[2] = (bytes[3] << 6) | ((bytes[2] & 4) << 3);
247 t->arr8[3] = 0;
248 *(uint32_t *)(&t->arr8[4]) = byteswap32(*(uint32_t *)(&t->arr8[4]));
249 *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8]));
250 *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16]));
251 break;
252 case TRAPPING_INSTR_T:
253 b = t->arr8[1];
254 t->arr8[1] = (b << 7) | ((b&2) << 5) | ((b&4) << 3) | ((b&8) << 1) |
255 ((b&0x10) >> 1);
256 bytes[2] = t->arr8[3];
257 bytes[3] = t->arr8[2];
258 t->arr8[2] = (bytes[2] << 6) | (bytes[3] >> 2);
259 t->arr8[3] = (bytes[3] << 6);
260 *(uint32_t *)(&t->arr8[4]) = byteswap32(*(uint32_t *)(&t->arr8[4]));
261 *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8]));
262 *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16]));
263 break;
264 }
265 }
266
267 static void b2l(rstf_uint8T *t)
268 {
269 uint8_t bytes[sizeof(rstf_protoT)/sizeof(uint8_t)], b;
270 int i;
271 switch (t->arr8[0]) {
272 case INSTR_T:
273 b = t->arr8[1];
274 t->arr8[1] = (b << 7) | ((b & 2) << 5) | ((b & 4) << 3) |
275 ((b & 8) << 1) | ((b & 0x10) >> 1) | ((b & 0x20) >> 3) |
276 ((b & 0x40) >> 5) | (b >> 7);
277 bytes[2] = (t->arr8[2] & 3);
278 bytes[3] = (t->arr8[3] & 0xc0) | (t->arr8[2] >> 2);
279 t->arr8[2] = bytes[3];
280 t->arr8[3] = bytes[2];
281 *(uint32_t *)(&t->arr8[4]) = byteswap32(*(uint32_t *)(&t->arr8[4]));
282 *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8]));
283 *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16]));
284 break;
285 case TRACEINFO_T:
286 switch (t->arr8[1]) {
287 case RSTT2_NLEVEL_T:
288 *(uint16_t *)(&t->arr8[2]) = byteswap16(*(uint16_t *)(&t->arr8[2]));
289 *(uint32_t *)(&t->arr8[4]) = byteswap32(*(uint32_t *)(&t->arr8[4]));
290 *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8]));
291 break;
292 case RSTT2_CPUINFO_T:
293 *(uint16_t *)(&t->arr8[2]) = byteswap16(*(uint16_t *)(&t->arr8[2]));
294 *(uint16_t *)(&t->arr8[4]) = byteswap16(*(uint16_t *)(&t->arr8[4]));
295 *(uint16_t *)(&t->arr8[6]) = byteswap16(*(uint16_t *)(&t->arr8[6]));
296 break;
297 case RSTT2_CPUIDINFO_T:
298 for (i=4; i<24; i+=2)
299 *(uint16_t *)(&t->arr8[i]) = byteswap16(*(uint16_t *)(&t->arr8[i]));
300 break;
301 }
302 break;
303 case TLB_T:
304 b = t->arr8[1];
305 t->arr8[1] = (b >> 7) | ((b & 0x40) >> 5);
306 *(uint16_t *)(&t->arr8[2]) = byteswap16(*(uint16_t *)(&t->arr8[2]));
307 t->arr8[4] = (t->arr8[4] >> 6) | (t->arr8[4] << 2);
308 t->arr8[5] = (t->arr8[5] >> 4);
309 *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8]));
310 *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16]));
311 break;
312 case THREAD_T:
313 *(uint16_t *)(&t->arr8[2]) = byteswap16(*(uint16_t *)(&t->arr8[2]));
314 *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8]));
315 break;
316 case TRAP_T:
317 t->arr8[1] = (t->arr8[1] >> 7) | (t->arr8[1] << 4);
318 bytes[2] = (t->arr8[2] << 6) | (t->arr8[3] >> 2);
319 bytes[3] = (t->arr8[3] << 6) | (t->arr8[2] >> 2);
320 t->arr8[2] = bytes[3];
321 t->arr8[3] = bytes[2];
322 *(uint16_t *)(&t->arr8[4]) = byteswap16(*(uint16_t *)(&t->arr8[4]));
323 bytes[6] = (t->arr8[6] << 4) | (t->arr8[7] >> 4);
324 bytes[7] = (t->arr8[7] << 4) | (t->arr8[6] >> 4);
325 t->arr8[6] = bytes[7];
326 t->arr8[7] = bytes[6];
327 *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8]));
328 *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16]));
329 break;
330 case TRAPEXIT_T:
331 bytes[2] = (t->arr8[2] & 3);
332 bytes[3] = (t->arr8[3] & 0xc0) | (t->arr8[2] >> 2);
333 t->arr8[2] = bytes[3];
334 t->arr8[3] = bytes[2];
335 *(uint32_t *)(&t->arr8[4]) = byteswap32(*(uint32_t *)(&t->arr8[4]));
336 break;
337 case REGVAL_T:
338 t->arr8[1] = (t->arr8[1] >> 7) | (t->arr8[1] << 1);
339 bytes[7] = t->arr8[6] >> 5;
340 bytes[6] = 0;
341 t->arr8[6] = bytes[7];
342 t->arr8[7] = bytes[6];
343 *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8]));
344 *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16]));
345 break;
346 case CPU_T:
347 *(uint16_t *)(&t->arr8[6]) = byteswap16(*(uint16_t *)(&t->arr8[6]));
348 *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16]));
349 break;
350 case PROCESS_T:
351 *(uint32_t *)(&t->arr8[8]) = byteswap32(*(uint32_t *)(&t->arr8[8]));
352 *(uint32_t *)(&t->arr8[12]) = byteswap32(*(uint32_t *)(&t->arr8[12]));
353 *(uint32_t *)(&t->arr8[16]) = byteswap32(*(uint32_t *)(&t->arr8[16]));
354 *(uint32_t *)(&t->arr8[20]) = byteswap32(*(uint32_t *)(&t->arr8[20]));
355 break;
356 case DMA_T:
357 t->arr8[1] = t->arr8[1] << 7;
358 *(uint32_t *)(&t->arr8[4]) = byteswap32(*(uint32_t *)(&t->arr8[4]));
359 *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8]));
360 break;
361 case LEFTDELIM_T:
362 case RIGHTDELIM_T:
363 *(uint16_t *)(&t->arr8[2]) = byteswap16(*(uint16_t *)(&t->arr8[2]));
364 *(uint32_t *)(&t->arr8[4]) = byteswap32(*(uint32_t *)(&t->arr8[4]));
365 break;
366 case PREG_T:
367 *(uint16_t *)(&t->arr8[2]) = byteswap16(*(uint16_t *)(&t->arr8[2]));
368 *(uint16_t *)(&t->arr8[6]) = byteswap16(*(uint16_t *)(&t->arr8[6]));
369 t->arr8[9] = t->arr8[9] >> 6;
370 *(uint16_t *)(&t->arr8[16]) = byteswap16(*(uint16_t *)(&t->arr8[16]));
371 *(uint16_t *)(&t->arr8[18]) = byteswap16(*(uint16_t *)(&t->arr8[18]));
372 *(uint16_t *)(&t->arr8[20]) = byteswap16(*(uint16_t *)(&t->arr8[20]));
373 *(uint16_t *)(&t->arr8[22]) = byteswap16(*(uint16_t *)(&t->arr8[22]));
374 break;
375 case PHYSADDR_T:
376 t->arr8[1] = (t->arr8[1] >> 7) | (t->arr8[1] << 1);
377 bytes[3] = t->arr8[2] >> 5;
378 bytes[2] = 0;
379 t->arr8[2] = bytes[3];
380 t->arr8[3] = bytes[2];
381 *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8]));
382 *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16]));
383 break;
384 case PAVADIFF_T:
385 t->arr8[1] = (t->arr8[1] >> 7) | (t->arr8[1] << 1);
386 t->arr8[2] = (t->arr8[2] >> 5);
387 t->arr8[3] = 0;
388 *(uint16_t *)(&t->arr8[4]) = byteswap16(*(uint16_t *)(&t->arr8[4]));
389 *(uint16_t *)(&t->arr8[6]) = byteswap16(*(uint16_t *)(&t->arr8[6]));
390 *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8]));
391 *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16]));
392 break;
393 case FILEMARKER_T:
394 t->arr8[1] = (t->arr8[1] >> 7) | (t->arr8[1] << 1);
395 t->arr8[4] = (t->arr8[4] >> 6);
396 t->arr8[5] = t->arr8[6] = t->arr8[7] = 0;
397 *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8]));
398 *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16]));
399 break;
400 case PATCH_T:
401 t->arr8[1] = (t->arr8[1] << 7);
402 *(uint16_t *)(&t->arr8[4]) = byteswap16(*(uint16_t *)(&t->arr8[4]));
403 break;
404 case HWINFO_T:
405 t->arr8[1] = (t->arr8[1] >> 7);
406 *(uint16_t *)(&t->arr8[4]) = byteswap16(*(uint16_t *)(&t->arr8[4]));
407 *(uint16_t *)(&t->arr8[6]) = byteswap16(*(uint16_t *)(&t->arr8[6]));
408 *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8]));
409 *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16]));
410 break;
411 case MEMVAL_T:
412 b = t->arr8[1];
413 t->arr8[1] = (b >> 7) | ((b&0x40) >> 5) | ((b&0x20) >> 3) | (b << 6);
414 if (b & 0x80) { /* ismemval128 */
415 *(uint32_t *)(&t->arr8[4]) = byteswap32(*(uint32_t *)(&t->arr8[4]));
416 }
417 else { /* ismemval64 */
418 t->arr8[3] = (t->arr8[3] << 4);
419 }
420 *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8]));
421 *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16]));
422 break;
423 case BUSTRACE_T:
424 b = t->arr8[1];
425 t->arr8[1] = (b >> 7) | ((b&0x40) >> 5) | ((b&0x20) >> 3) |
426 ((b&0x10) >> 1) | (b << 4);
427 bytes[2] = (t->arr8[3] >> 2) | (t->arr8[2] << 6);
428 bytes[3] = (t->arr8[2] >> 2) | (t->arr8[3] << 6);
429 t->arr8[2] = bytes[3];
430 t->arr8[3] = bytes[2];
431 b = t->arr8[4];
432 bytes[7] = (b >> 7) | ((b&0x40) >> 5) | (t->arr8[6] & 0xfc);
433 t->arr8[4] = bytes[7];
434 t->arr8[6] = (b & 0x3f);
435 t->arr8[7] = 0;
436 *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8]));
437 *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16]));
438 break;
439 case SNOOP_T:
440 *(uint16_t *)(&t->arr8[2]) = byteswap16(*(uint16_t *)(&t->arr8[2]));
441 *(uint32_t *)(&t->arr8[4]) = byteswap32(*(uint32_t *)(&t->arr8[4]));
442 *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8]));
443 *(uint16_t *)(&t->arr8[16]) = byteswap16(*(uint16_t *)(&t->arr8[16]));
444 break;
445 case TSB_ACCESS_T:
446 t->arr8[1] = (t->arr8[1] << 7);
447 bytes[2] = (t->arr8[2] << 6) | (t->arr8[3] >> 2);
448 bytes[3] = (t->arr8[3] << 6);
449 t->arr8[2] = bytes[3];
450 t->arr8[3] = bytes[2];
451 *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8]));
452 *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16]));
453 break;
454 case RFS_SECTION_HEADER_T:
455 *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8]));
456 break;
457 case RFS_CW_T:
458 bytes[1] = (t->arr8[2] << 2) | (t->arr8[1] >> 6);
459 bytes[2] = (t->arr8[1] << 2) | (t->arr8[2] >> 6);
460 t->arr8[1] = bytes[2];
461 t->arr8[2] = bytes[1];
462 switch (bytes[1] >> 2) {
463 case cw_reftype_DMA_R:
464 case cw_reftype_DMA_W:
465 *(uint32_t *)(&t->arr8[4]) = byteswap32(*(uint32_t *)(&t->arr8[4]));
466 break;
467 default:
468 b = t->arr8[5];
469 t->arr8[5] = (b >> 7) | ((b&0x7c) >> 1);
470 t->arr8[6] = 0;
471 t->arr8[7] = 0;
472 break;
473 }
474 *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8]));
475 *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16]));
476 break;
477 case RFS_BT_T:
478 bytes[3] = (t->arr8[2] >> 6) | (t->arr8[1] << 2);
479 bytes[2] = (t->arr8[1] >> 6) | ((t->arr8[2] & 0x20) >> 3);
480 t->arr8[1] = bytes[3];
481 t->arr8[2] = bytes[2];
482 t->arr8[3] = 0;
483 *(uint32_t *)(&t->arr8[4]) = byteswap32(*(uint32_t *)(&t->arr8[4]));
484 *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8]));
485 *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16]));
486 break;
487 case TRAPPING_INSTR_T:
488 b = t->arr8[1];
489 t->arr8[1] = (b >> 7) | ((b&0x40) >> 5) | ((b&0x20) >> 3) |
490 ((b&0x10) >> 1) | ((b&8) << 1);
491 bytes[2] = (t->arr8[2] >> 6);
492 bytes[3] = (t->arr8[2] << 2) | (t->arr8[3] >> 6);
493 t->arr8[2] = bytes[3];
494 t->arr8[3] = bytes[2];
495 *(uint32_t *)(&t->arr8[4]) = byteswap32(*(uint32_t *)(&t->arr8[4]));
496 *(uint64_t *)(&t->arr8[8]) = byteswap64(*(uint64_t *)(&t->arr8[8]));
497 *(uint64_t *)(&t->arr8[16]) = byteswap64(*(uint64_t *)(&t->arr8[16]));
498 break;
499 }
500 }
501};
502
503#endif