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);