1 #ifdef TARGET_WORDS_BIGENDIAN
2 #define GET_LMASK(v) ((v) & 3)
4 #define GET_LMASK(v) (((v) & 3) ^ 3)
7 void glue(do_lwl
, MEMSUFFIX
) (uint32_t tmp
)
10 target_ulong sav
= T0
;
13 /* XXX: this is valid only in big-endian mode
14 * should be reverted for little-endian...
16 switch (GET_LMASK(T0
)) {
21 T0
= (tmp
<< 8) | (T1
& 0x000000FF);
24 T0
= (tmp
<< 16) | (T1
& 0x0000FFFF);
27 T0
= (tmp
<< 24) | (T1
& 0x00FFFFFF);
30 #if defined (DEBUG_OP)
32 fprintf(logfile
, "%s: %08x - %08x %08x => %08x\n",
33 __func__
, sav
, tmp
, T1
, T0
);
39 void glue(do_lwr
, MEMSUFFIX
) (uint32_t tmp
)
41 #if defined (DEBUG_OP)
42 target_ulong sav
= T0
;
45 /* XXX: this is valid only in big-endian mode
46 * should be reverted for little-endian...
48 switch (GET_LMASK(T0
)) {
50 T0
= (tmp
>> 24) | (T1
& 0xFFFFFF00);
53 T0
= (tmp
>> 16) | (T1
& 0xFFFF0000);
56 T0
= (tmp
>> 8) | (T1
& 0xFF000000);
62 #if defined (DEBUG_OP)
64 fprintf(logfile
, "%s: %08x - %08x %08x => %08x\n",
65 __func__
, sav
, tmp
, T1
, T0
);
71 uint32_t glue(do_swl
, MEMSUFFIX
) (uint32_t tmp
)
73 #if defined (DEBUG_OP)
77 #if defined (DEBUG_OP)
80 /* XXX: this is valid only in big-endian mode
81 * should be reverted for little-endian...
83 switch (GET_LMASK(T0
)) {
88 tmp
= (tmp
& 0xFF000000) | (T1
>> 8);
91 tmp
= (tmp
& 0xFFFF0000) | (T1
>> 16);
94 tmp
= (tmp
& 0xFFFFFF00) | (T1
>> 24);
97 #if defined (DEBUG_OP)
99 fprintf(logfile
, "%s: %08x - %08x %08x => %08x\n",
100 __func__
, T0
, sav
, T1
, tmp
);
107 uint32_t glue(do_swr
, MEMSUFFIX
) (uint32_t tmp
)
109 #if defined (DEBUG_OP)
113 #if defined (DEBUG_OP)
116 /* XXX: this is valid only in big-endian mode
117 * should be reverted for little-endian...
119 switch (GET_LMASK(T0
)) {
121 tmp
= (tmp
& 0x00FFFFFF) | (T1
<< 24);
124 tmp
= (tmp
& 0x0000FFFF) | (T1
<< 16);
127 tmp
= (tmp
& 0x000000FF) | (T1
<< 8);
133 #if defined (DEBUG_OP)
135 fprintf(logfile
, "%s: %08x - %08x %08x => %08x\n",
136 __func__
, T0
, sav
, T1
, tmp
);