sim-endian.h revision 1.1.1.11 1 1.1 christos /* The common simulator framework for GDB, the GNU Debugger.
2 1.1 christos
3 1.1.1.11 christos Copyright 2002-2024 Free Software Foundation, Inc.
4 1.1 christos
5 1.1 christos Contributed by Andrew Cagney and Red Hat.
6 1.1 christos
7 1.1 christos This file is part of GDB.
8 1.1 christos
9 1.1 christos This program is free software; you can redistribute it and/or modify
10 1.1 christos it under the terms of the GNU General Public License as published by
11 1.1 christos the Free Software Foundation; either version 3 of the License, or
12 1.1 christos (at your option) any later version.
13 1.1 christos
14 1.1 christos This program is distributed in the hope that it will be useful,
15 1.1 christos but WITHOUT ANY WARRANTY; without even the implied warranty of
16 1.1 christos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 1.1 christos GNU General Public License for more details.
18 1.1 christos
19 1.1 christos You should have received a copy of the GNU General Public License
20 1.1 christos along with this program. If not, see <http://www.gnu.org/licenses/>. */
21 1.1 christos
22 1.1 christos
23 1.1.1.5 christos #ifndef SIM_ENDIAN_H
24 1.1.1.5 christos #define SIM_ENDIAN_H
25 1.1 christos
26 1.1.1.11 christos #include "sim-types.h"
27 1.1 christos
28 1.1 christos /* C byte conversion functions */
29 1.1 christos
30 1.1 christos INLINE_SIM_ENDIAN(unsigned_1) endian_h2t_1(unsigned_1 x);
31 1.1 christos INLINE_SIM_ENDIAN(unsigned_2) endian_h2t_2(unsigned_2 x);
32 1.1 christos INLINE_SIM_ENDIAN(unsigned_4) endian_h2t_4(unsigned_4 x);
33 1.1 christos INLINE_SIM_ENDIAN(unsigned_8) endian_h2t_8(unsigned_8 x);
34 1.1 christos INLINE_SIM_ENDIAN(unsigned_16) endian_h2t_16(unsigned_16 x);
35 1.1 christos
36 1.1 christos INLINE_SIM_ENDIAN(unsigned_1) endian_t2h_1(unsigned_1 x);
37 1.1 christos INLINE_SIM_ENDIAN(unsigned_2) endian_t2h_2(unsigned_2 x);
38 1.1 christos INLINE_SIM_ENDIAN(unsigned_4) endian_t2h_4(unsigned_4 x);
39 1.1 christos INLINE_SIM_ENDIAN(unsigned_8) endian_t2h_8(unsigned_8 x);
40 1.1 christos INLINE_SIM_ENDIAN(unsigned_16) endian_t2h_16(unsigned_16 x);
41 1.1 christos
42 1.1 christos INLINE_SIM_ENDIAN(unsigned_1) swap_1(unsigned_1 x);
43 1.1 christos INLINE_SIM_ENDIAN(unsigned_2) swap_2(unsigned_2 x);
44 1.1 christos INLINE_SIM_ENDIAN(unsigned_4) swap_4(unsigned_4 x);
45 1.1 christos INLINE_SIM_ENDIAN(unsigned_8) swap_8(unsigned_8 x);
46 1.1 christos INLINE_SIM_ENDIAN(unsigned_16) swap_16(unsigned_16 x);
47 1.1 christos
48 1.1 christos INLINE_SIM_ENDIAN(unsigned_1) endian_h2be_1(unsigned_1 x);
49 1.1 christos INLINE_SIM_ENDIAN(unsigned_2) endian_h2be_2(unsigned_2 x);
50 1.1 christos INLINE_SIM_ENDIAN(unsigned_4) endian_h2be_4(unsigned_4 x);
51 1.1 christos INLINE_SIM_ENDIAN(unsigned_8) endian_h2be_8(unsigned_8 x);
52 1.1 christos INLINE_SIM_ENDIAN(unsigned_16) endian_h2be_16(unsigned_16 x);
53 1.1 christos
54 1.1 christos INLINE_SIM_ENDIAN(unsigned_1) endian_be2h_1(unsigned_1 x);
55 1.1 christos INLINE_SIM_ENDIAN(unsigned_2) endian_be2h_2(unsigned_2 x);
56 1.1 christos INLINE_SIM_ENDIAN(unsigned_4) endian_be2h_4(unsigned_4 x);
57 1.1 christos INLINE_SIM_ENDIAN(unsigned_8) endian_be2h_8(unsigned_8 x);
58 1.1 christos INLINE_SIM_ENDIAN(unsigned_16) endian_be2h_16(unsigned_16 x);
59 1.1 christos
60 1.1 christos INLINE_SIM_ENDIAN(unsigned_1) endian_h2le_1(unsigned_1 x);
61 1.1 christos INLINE_SIM_ENDIAN(unsigned_2) endian_h2le_2(unsigned_2 x);
62 1.1 christos INLINE_SIM_ENDIAN(unsigned_4) endian_h2le_4(unsigned_4 x);
63 1.1 christos INLINE_SIM_ENDIAN(unsigned_8) endian_h2le_8(unsigned_8 x);
64 1.1 christos INLINE_SIM_ENDIAN(unsigned_16) endian_h2le_16(unsigned_16 x);
65 1.1 christos
66 1.1 christos INLINE_SIM_ENDIAN(unsigned_1) endian_le2h_1(unsigned_1 x);
67 1.1 christos INLINE_SIM_ENDIAN(unsigned_2) endian_le2h_2(unsigned_2 x);
68 1.1 christos INLINE_SIM_ENDIAN(unsigned_4) endian_le2h_4(unsigned_4 x);
69 1.1 christos INLINE_SIM_ENDIAN(unsigned_8) endian_le2h_8(unsigned_8 x);
70 1.1 christos INLINE_SIM_ENDIAN(unsigned_16) endian_le2h_16(unsigned_16 x);
71 1.1 christos
72 1.1 christos INLINE_SIM_ENDIAN(void*) offset_1(unsigned_1 *x, unsigned ws, unsigned w);
73 1.1 christos INLINE_SIM_ENDIAN(void*) offset_2(unsigned_2 *x, unsigned ws, unsigned w);
74 1.1 christos INLINE_SIM_ENDIAN(void*) offset_4(unsigned_4 *x, unsigned ws, unsigned w);
75 1.1 christos INLINE_SIM_ENDIAN(void*) offset_8(unsigned_8 *x, unsigned ws, unsigned w);
76 1.1 christos INLINE_SIM_ENDIAN(void*) offset_16(unsigned_16 *x, unsigned ws, unsigned w);
77 1.1 christos
78 1.1 christos INLINE_SIM_ENDIAN(unsigned_16) sim_endian_join_16 (unsigned_8 h, unsigned_8 l);
79 1.1 christos INLINE_SIM_ENDIAN(unsigned_8) sim_endian_split_16 (unsigned_16 word, int w);
80 1.1 christos
81 1.1 christos
82 1.1 christos /* SWAP */
83 1.1 christos
84 1.1 christos #define SWAP_1 swap_1
85 1.1 christos #define SWAP_2 swap_2
86 1.1 christos #define SWAP_4 swap_4
87 1.1 christos #define SWAP_8 swap_8
88 1.1 christos #define SWAP_16 swap_16
89 1.1 christos
90 1.1 christos
91 1.1 christos /* HOST to BE */
92 1.1 christos
93 1.1 christos #define H2BE_1 endian_h2be_1
94 1.1 christos #define H2BE_2 endian_h2be_2
95 1.1 christos #define H2BE_4 endian_h2be_4
96 1.1 christos #define H2BE_8 endian_h2be_8
97 1.1 christos #define H2BE_16 endian_h2be_16
98 1.1 christos #define BE2H_1 endian_be2h_1
99 1.1 christos #define BE2H_2 endian_be2h_2
100 1.1 christos #define BE2H_4 endian_be2h_4
101 1.1 christos #define BE2H_8 endian_be2h_8
102 1.1 christos #define BE2H_16 endian_be2h_16
103 1.1 christos
104 1.1 christos
105 1.1 christos /* HOST to LE */
106 1.1 christos
107 1.1 christos #define H2LE_1 endian_h2le_1
108 1.1 christos #define H2LE_2 endian_h2le_2
109 1.1 christos #define H2LE_4 endian_h2le_4
110 1.1 christos #define H2LE_8 endian_h2le_8
111 1.1 christos #define H2LE_16 endian_h2le_16
112 1.1 christos #define LE2H_1 endian_le2h_1
113 1.1 christos #define LE2H_2 endian_le2h_2
114 1.1 christos #define LE2H_4 endian_le2h_4
115 1.1 christos #define LE2H_8 endian_le2h_8
116 1.1 christos #define LE2H_16 endian_le2h_16
117 1.1 christos
118 1.1 christos
119 1.1 christos /* HOST to TARGET */
120 1.1 christos
121 1.1 christos #define H2T_1 endian_h2t_1
122 1.1 christos #define H2T_2 endian_h2t_2
123 1.1 christos #define H2T_4 endian_h2t_4
124 1.1 christos #define H2T_8 endian_h2t_8
125 1.1 christos #define H2T_16 endian_h2t_16
126 1.1 christos #define T2H_1 endian_t2h_1
127 1.1 christos #define T2H_2 endian_t2h_2
128 1.1 christos #define T2H_4 endian_t2h_4
129 1.1 christos #define T2H_8 endian_t2h_8
130 1.1 christos #define T2H_16 endian_t2h_16
131 1.1 christos
132 1.1 christos
133 1.1 christos /* CONVERT IN PLACE
134 1.1 christos
135 1.1 christos These macros, given an argument of unknown size, swap its value in
136 1.1 christos place if a host/target conversion is required. */
137 1.1 christos
138 1.1 christos #define H2T(VARIABLE) \
139 1.1 christos do { \
140 1.1 christos void *vp = &(VARIABLE); \
141 1.1 christos switch (sizeof (VARIABLE)) { \
142 1.1 christos case 1: *(unsigned_1*)vp = H2T_1(*(unsigned_1*)vp); break; \
143 1.1 christos case 2: *(unsigned_2*)vp = H2T_2(*(unsigned_2*)vp); break; \
144 1.1 christos case 4: *(unsigned_4*)vp = H2T_4(*(unsigned_4*)vp); break; \
145 1.1 christos case 8: *(unsigned_8*)vp = H2T_8(*(unsigned_8*)vp); break; \
146 1.1 christos case 16: *(unsigned_16*)vp = H2T_16(*(unsigned_16*)vp); break; \
147 1.1 christos } \
148 1.1 christos } while (0)
149 1.1 christos
150 1.1 christos #define T2H(VARIABLE) \
151 1.1 christos do { \
152 1.1 christos switch (sizeof(VARIABLE)) { \
153 1.1 christos case 1: VARIABLE = T2H_1(VARIABLE); break; \
154 1.1 christos case 2: VARIABLE = T2H_2(VARIABLE); break; \
155 1.1 christos case 4: VARIABLE = T2H_4(VARIABLE); break; \
156 1.1 christos case 8: VARIABLE = T2H_8(VARIABLE); break; \
157 1.1 christos /*case 16: VARIABLE = T2H_16(VARIABLE); break;*/ \
158 1.1 christos } \
159 1.1 christos } while (0)
160 1.1 christos
161 1.1 christos #define SWAP(VARIABLE) \
162 1.1 christos do { \
163 1.1 christos switch (sizeof(VARIABLE)) { \
164 1.1 christos case 1: VARIABLE = SWAP_1(VARIABLE); break; \
165 1.1 christos case 2: VARIABLE = SWAP_2(VARIABLE); break; \
166 1.1 christos case 4: VARIABLE = SWAP_4(VARIABLE); break; \
167 1.1 christos case 8: VARIABLE = SWAP_8(VARIABLE); break; \
168 1.1 christos /*case 16: VARIABLE = SWAP_16(VARIABLE); break;*/ \
169 1.1 christos } \
170 1.1 christos } while (0)
171 1.1 christos
172 1.1 christos #define H2BE(VARIABLE) \
173 1.1 christos do { \
174 1.1 christos switch (sizeof(VARIABLE)) { \
175 1.1 christos case 1: VARIABLE = H2BE_1(VARIABLE); break; \
176 1.1 christos case 2: VARIABLE = H2BE_2(VARIABLE); break; \
177 1.1 christos case 4: VARIABLE = H2BE_4(VARIABLE); break; \
178 1.1 christos case 8: VARIABLE = H2BE_8(VARIABLE); break; \
179 1.1 christos /*case 16: VARIABLE = H2BE_16(VARIABLE); break;*/ \
180 1.1 christos } \
181 1.1 christos } while (0)
182 1.1 christos
183 1.1 christos #define BE2H(VARIABLE) \
184 1.1 christos do { \
185 1.1 christos switch (sizeof(VARIABLE)) { \
186 1.1 christos case 1: VARIABLE = BE2H_1(VARIABLE); break; \
187 1.1 christos case 2: VARIABLE = BE2H_2(VARIABLE); break; \
188 1.1 christos case 4: VARIABLE = BE2H_4(VARIABLE); break; \
189 1.1 christos case 8: VARIABLE = BE2H_8(VARIABLE); break; \
190 1.1 christos /*case 16: VARIABLE = BE2H_16(VARIABLE); break;*/ \
191 1.1 christos } \
192 1.1 christos } while (0)
193 1.1 christos
194 1.1 christos #define H2LE(VARIABLE) \
195 1.1 christos do { \
196 1.1 christos switch (sizeof(VARIABLE)) { \
197 1.1 christos case 1: VARIABLE = H2LE_1(VARIABLE); break; \
198 1.1 christos case 2: VARIABLE = H2LE_2(VARIABLE); break; \
199 1.1 christos case 4: VARIABLE = H2LE_4(VARIABLE); break; \
200 1.1 christos case 8: VARIABLE = H2LE_8(VARIABLE); break; \
201 1.1 christos /*case 16: VARIABLE = H2LE_16(VARIABLE); break;*/ \
202 1.1 christos } \
203 1.1 christos } while (0)
204 1.1 christos
205 1.1 christos #define LE2H(VARIABLE) \
206 1.1 christos do { \
207 1.1 christos switch (sizeof(VARIABLE)) { \
208 1.1 christos case 1: VARIABLE = LE2H_1(VARIABLE); break; \
209 1.1 christos case 2: VARIABLE = LE2H_2(VARIABLE); break; \
210 1.1 christos case 4: VARIABLE = LE2H_4(VARIABLE); break; \
211 1.1 christos case 8: VARIABLE = LE2H_8(VARIABLE); break; \
212 1.1 christos /*case 16: VARIABLE = LE2H_16(VARIABLE); break;*/ \
213 1.1 christos } \
214 1.1 christos } while (0)
215 1.1 christos
216 1.1 christos
217 1.1 christos
218 1.1 christos /* TARGET WORD:
219 1.1 christos
220 1.1 christos Byte swap a quantity the size of the targets word */
221 1.1 christos
222 1.1 christos #if (WITH_TARGET_WORD_BITSIZE == 64)
223 1.1 christos #define H2T_word H2T_8
224 1.1 christos #define T2H_word T2H_8
225 1.1 christos #define H2BE_word H2BE_8
226 1.1 christos #define BE2H_word BE2H_8
227 1.1 christos #define H2LE_word H2LE_8
228 1.1 christos #define LE2H_word LE2H_8
229 1.1 christos #define SWAP_word SWAP_8
230 1.1 christos #endif
231 1.1 christos #if (WITH_TARGET_WORD_BITSIZE == 32)
232 1.1 christos #define H2T_word H2T_4
233 1.1 christos #define T2H_word T2H_4
234 1.1 christos #define H2BE_word H2BE_4
235 1.1 christos #define BE2H_word BE2H_4
236 1.1 christos #define H2LE_word H2LE_4
237 1.1 christos #define LE2H_word LE2H_4
238 1.1 christos #define SWAP_word SWAP_4
239 1.1 christos #endif
240 1.1 christos
241 1.1 christos
242 1.1 christos
243 1.1 christos /* TARGET CELL:
244 1.1 christos
245 1.1 christos Byte swap a quantity the size of the targets IEEE 1275 memory cell */
246 1.1 christos
247 1.1 christos #define H2T_cell H2T_4
248 1.1 christos #define T2H_cell T2H_4
249 1.1 christos #define H2BE_cell H2BE_4
250 1.1 christos #define BE2H_cell BE2H_4
251 1.1 christos #define H2LE_cell H2LE_4
252 1.1 christos #define LE2H_cell LE2H_4
253 1.1 christos #define SWAP_cell SWAP_4
254 1.1 christos
255 1.1 christos
256 1.1 christos
257 1.1 christos /* HOST Offsets:
258 1.1 christos
259 1.1 christos Address of high/low sub-word within a host word quantity.
260 1.1 christos
261 1.1 christos Address of sub-word N within a host word quantity. NOTE: Numbering
262 1.1 christos is BIG endian always. */
263 1.1 christos
264 1.1 christos #define AH1_2(X) (unsigned_1*)offset_2((X), 1, 0)
265 1.1 christos #define AL1_2(X) (unsigned_1*)offset_2((X), 1, 1)
266 1.1 christos
267 1.1 christos #define AH2_4(X) (unsigned_2*)offset_4((X), 2, 0)
268 1.1 christos #define AL2_4(X) (unsigned_2*)offset_4((X), 2, 1)
269 1.1 christos
270 1.1 christos #define AH4_8(X) (unsigned_4*)offset_8((X), 4, 0)
271 1.1 christos #define AL4_8(X) (unsigned_4*)offset_8((X), 4, 1)
272 1.1 christos
273 1.1 christos #define AH8_16(X) (unsigned_8*)offset_16((X), 8, 0)
274 1.1 christos #define AL8_16(X) (unsigned_8*)offset_16((X), 8, 1)
275 1.1 christos
276 1.1 christos #if (WITH_TARGET_WORD_BITSIZE == 64)
277 1.1 christos #define AH_word(X) AH4_8(X)
278 1.1 christos #define AL_word(X) AL4_8(X)
279 1.1 christos #endif
280 1.1 christos #if (WITH_TARGET_WORD_BITSIZE == 32)
281 1.1 christos #define AH_word(X) AH2_4(X)
282 1.1 christos #define AL_word(X) AL2_4(X)
283 1.1 christos #endif
284 1.1 christos
285 1.1 christos
286 1.1 christos #define A1_2(X,N) (unsigned_1*)offset_2((X), 1, (N))
287 1.1 christos
288 1.1 christos #define A1_4(X,N) (unsigned_1*)offset_4((X), 1, (N))
289 1.1 christos #define A2_4(X,N) (unsigned_2*)offset_4((X), 2, (N))
290 1.1 christos
291 1.1 christos #define A1_8(X,N) (unsigned_1*)offset_8((X), 1, (N))
292 1.1 christos #define A2_8(X,N) (unsigned_2*)offset_8((X), 2, (N))
293 1.1 christos #define A4_8(X,N) (unsigned_4*)offset_8((X), 4, (N))
294 1.1 christos
295 1.1 christos #define A1_16(X,N) (unsigned_1*)offset_16((X), 1, (N))
296 1.1 christos #define A2_16(X,N) (unsigned_2*)offset_16((X), 2, (N))
297 1.1 christos #define A4_16(X,N) (unsigned_4*)offset_16((X), 4, (N))
298 1.1 christos #define A8_16(X,N) (unsigned_8*)offset_16((X), 8, (N))
299 1.1 christos
300 1.1 christos
301 1.1 christos
302 1.1 christos
303 1.1 christos /* HOST Components:
304 1.1 christos
305 1.1 christos Value of sub-word within a host word quantity */
306 1.1 christos
307 1.1 christos #define VH1_2(X) ((unsigned_1)((unsigned_2)(X) >> 8))
308 1.1 christos #define VL1_2(X) (unsigned_1)(X)
309 1.1 christos
310 1.1 christos #define VH2_4(X) ((unsigned_2)((unsigned_4)(X) >> 16))
311 1.1 christos #define VL2_4(X) ((unsigned_2)(X))
312 1.1 christos
313 1.1 christos #define VH4_8(X) ((unsigned_4)((unsigned_8)(X) >> 32))
314 1.1 christos #define VL4_8(X) ((unsigned_4)(X))
315 1.1 christos
316 1.1 christos #define VH8_16(X) (sim_endian_split_16 ((X), 0))
317 1.1 christos #define VL8_16(X) (sim_endian_split_16 ((X), 1))
318 1.1 christos
319 1.1 christos #if (WITH_TARGET_WORD_BITSIZE == 64)
320 1.1 christos #define VH_word(X) VH4_8(X)
321 1.1 christos #define VL_word(X) VL4_8(X)
322 1.1 christos #endif
323 1.1 christos #if (WITH_TARGET_WORD_BITSIZE == 32)
324 1.1 christos #define VH_word(X) VH2_4(X)
325 1.1 christos #define VL_word(X) VL2_4(X)
326 1.1 christos #endif
327 1.1 christos
328 1.1 christos
329 1.1 christos #define V1_2(X,N) ((unsigned_1)((unsigned_2)(X) >> ( 8 * (1 - (N)))))
330 1.1 christos
331 1.1 christos #define V1_4(X,N) ((unsigned_1)((unsigned_4)(X) >> ( 8 * (3 - (N)))))
332 1.1 christos #define V2_4(X,N) ((unsigned_2)((unsigned_4)(X) >> (16 * (1 - (N)))))
333 1.1 christos
334 1.1 christos #define V1_8(X,N) ((unsigned_1)((unsigned_8)(X) >> ( 8 * (7 - (N)))))
335 1.1 christos #define V2_8(X,N) ((unsigned_2)((unsigned_8)(X) >> (16 * (3 - (N)))))
336 1.1 christos #define V4_8(X,N) ((unsigned_4)((unsigned_8)(X) >> (32 * (1 - (N)))))
337 1.1 christos
338 1.1 christos #define V1_16(X,N) (*A1_16 (&(X),N))
339 1.1 christos #define V2_16(X,N) (*A2_16 (&(X),N))
340 1.1 christos #define V4_16(X,N) (*A4_16 (&(X),N))
341 1.1 christos #define V8_16(X,N) (*A8_16 (&(X),N))
342 1.1 christos
343 1.1 christos
344 1.1 christos /* Reverse - insert sub-word into word quantity */
345 1.1 christos
346 1.1 christos #define V2_H1(X) ((unsigned_2)(unsigned_1)(X) << 8)
347 1.1 christos #define V2_L1(X) ((unsigned_2)(unsigned_1)(X))
348 1.1 christos
349 1.1 christos #define V4_H2(X) ((unsigned_4)(unsigned_2)(X) << 16)
350 1.1 christos #define V4_L2(X) ((unsigned_4)(unsigned_2)(X))
351 1.1 christos
352 1.1 christos #define V8_H4(X) ((unsigned_8)(unsigned_4)(X) << 32)
353 1.1 christos #define V8_L4(X) ((unsigned_8)(unsigned_4)(X))
354 1.1 christos
355 1.1 christos #define V16_H8(X) ((unsigned_16)(unsigned_8)(X) << 64)
356 1.1 christos #define V16_L8(X) ((unsigned_16)(unsigned_8)(X))
357 1.1 christos
358 1.1 christos
359 1.1 christos #define V2_1(X,N) ((unsigned_2)(unsigned_1)(X) << ( 8 * (1 - (N))))
360 1.1 christos
361 1.1 christos #define V4_1(X,N) ((unsigned_4)(unsigned_1)(X) << ( 8 * (3 - (N))))
362 1.1 christos #define V4_2(X,N) ((unsigned_4)(unsigned_2)(X) << (16 * (1 - (N))))
363 1.1 christos
364 1.1 christos #define V8_1(X,N) ((unsigned_8)(unsigned_1)(X) << ( 8 * (7 - (N))))
365 1.1 christos #define V8_2(X,N) ((unsigned_8)(unsigned_2)(X) << (16 * (3 - (N))))
366 1.1 christos #define V8_4(X,N) ((unsigned_8)(unsigned_4)(X) << (32 * (1 - (N))))
367 1.1 christos
368 1.1 christos #define V16_1(X,N) ((unsigned_16)(unsigned_1)(X) << ( 8 * (15 - (N))))
369 1.1 christos #define V16_2(X,N) ((unsigned_16)(unsigned_2)(X) << (16 * (7 - (N))))
370 1.1 christos #define V16_4(X,N) ((unsigned_16)(unsigned_4)(X) << (32 * (3 - (N))))
371 1.1 christos #define V16_8(X,N) ((unsigned_16)(unsigned_8)(X) << (64 * (1 - (N))))
372 1.1 christos
373 1.1 christos
374 1.1 christos /* Reverse - insert N sub-words into single word quantity */
375 1.1 christos
376 1.1 christos #define U2_1(I0,I1) (V2_1(I0,0) | V2_1(I1,1))
377 1.1 christos #define U4_1(I0,I1,I2,I3) (V4_1(I0,0) | V4_1(I1,1) | V4_1(I2,2) | V4_1(I3,3))
378 1.1 christos #define U8_1(I0,I1,I2,I3,I4,I5,I6,I7) \
379 1.1 christos (V8_1(I0,0) | V8_1(I1,1) | V8_1(I2,2) | V8_1(I3,3) \
380 1.1 christos | V8_1(I4,4) | V8_1(I5,5) | V8_1(I6,6) | V8_1(I7,7))
381 1.1 christos #define U16_1(I0,I1,I2,I3,I4,I5,I6,I7,I8,I9,I10,I11,I12,I13,I14,I15) \
382 1.1 christos (V16_1(I0,0) | V16_1(I1,1) | V16_1(I2,2) | V16_1(I3,3) \
383 1.1 christos | V16_1(I4,4) | V16_1(I5,5) | V16_1(I6,6) | V16_1(I7,7) \
384 1.1 christos | V16_1(I8,8) | V16_1(I9,9) | V16_1(I10,10) | V16_1(I11,11) \
385 1.1 christos | V16_1(I12,12) | V16_1(I13,13) | V16_1(I14,14) | V16_1(I15,15))
386 1.1 christos
387 1.1 christos #define U4_2(I0,I1) (V4_2(I0,0) | V4_2(I1,1))
388 1.1 christos #define U8_2(I0,I1,I2,I3) (V8_2(I0,0) | V8_2(I1,1) | V8_2(I2,2) | V8_2(I3,3))
389 1.1 christos #define U16_2(I0,I1,I2,I3,I4,I5,I6,I7) \
390 1.1 christos (V16_2(I0,0) | V16_2(I1,1) | V16_2(I2,2) | V16_2(I3,3) \
391 1.1 christos | V16_2(I4,4) | V16_2(I5,5) | V16_2(I6,6) | V16_2(I7,7) )
392 1.1 christos
393 1.1 christos #define U8_4(I0,I1) (V8_4(I0,0) | V8_4(I1,1))
394 1.1 christos #define U16_4(I0,I1,I2,I3) (V16_4(I0,0) | V16_4(I1,1) | V16_4(I2,2) | V16_4(I3,3))
395 1.1 christos
396 1.1 christos #define U16_8(I0,I1) (sim_endian_join_16 (I0, I1))
397 1.1 christos
398 1.1 christos
399 1.1 christos #if (WITH_TARGET_WORD_BITSIZE == 64)
400 1.1 christos #define Vword_H(X) V8_H4(X)
401 1.1 christos #define Vword_L(X) V8_L4(X)
402 1.1 christos #endif
403 1.1 christos #if (WITH_TARGET_WORD_BITSIZE == 32)
404 1.1 christos #define Vword_H(X) V4_H2(X)
405 1.1 christos #define Vword_L(X) V4_L2(X)
406 1.1 christos #endif
407 1.1 christos
408 1.1 christos
409 1.1 christos
410 1.1 christos
411 1.1 christos #if H_REVEALS_MODULE_P (SIM_ENDIAN_INLINE)
412 1.1 christos #include "sim-endian.c"
413 1.1 christos #endif
414 1.1 christos
415 1.1.1.5 christos #endif /* SIM_ENDIAN_H */
416