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