Home | History | Annotate | Line # | Download | only in common
sim-endian.h revision 1.1.1.10.2.1
      1           1.1  christos /* The common simulator framework for GDB, the GNU Debugger.
      2           1.1  christos 
      3  1.1.1.10.2.1  perseant    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.10.2.1  perseant #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