1 1.1 christos /* The common simulator framework for GDB, the GNU Debugger. 2 1.1 christos 3 1.1.1.12 christos Copyright 2002-2025 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