]>
git.proxmox.com Git - qemu.git/blob - target-mips/op_helper_mem.c
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 switch (GET_LMASK(T0
)) {
18 T0
= (tmp
<< 8) | (T1
& 0x000000FF);
21 T0
= (tmp
<< 16) | (T1
& 0x0000FFFF);
24 T0
= (tmp
<< 24) | (T1
& 0x00FFFFFF);
27 #if defined (DEBUG_OP)
29 fprintf(logfile
, "%s: %08x - %08x %08x => %08x\n",
30 __func__
, sav
, tmp
, T1
, T0
);
36 void glue(do_lwr
, MEMSUFFIX
) (uint32_t tmp
)
38 #if defined (DEBUG_OP)
39 target_ulong sav
= T0
;
42 switch (GET_LMASK(T0
)) {
44 T0
= (tmp
>> 24) | (T1
& 0xFFFFFF00);
47 T0
= (tmp
>> 16) | (T1
& 0xFFFF0000);
50 T0
= (tmp
>> 8) | (T1
& 0xFF000000);
56 #if defined (DEBUG_OP)
58 fprintf(logfile
, "%s: %08x - %08x %08x => %08x\n",
59 __func__
, sav
, tmp
, T1
, T0
);
65 uint32_t glue(do_swl
, MEMSUFFIX
) (uint32_t tmp
)
67 #if defined (DEBUG_OP)
68 target_ulong sav
= tmp
;
71 switch (GET_LMASK(T0
)) {
76 tmp
= (tmp
& 0xFF000000) | (T1
>> 8);
79 tmp
= (tmp
& 0xFFFF0000) | (T1
>> 16);
82 tmp
= (tmp
& 0xFFFFFF00) | (T1
>> 24);
85 #if defined (DEBUG_OP)
87 fprintf(logfile
, "%s: %08x - %08x %08x => %08x\n",
88 __func__
, T0
, sav
, T1
, tmp
);
95 uint32_t glue(do_swr
, MEMSUFFIX
) (uint32_t tmp
)
97 #if defined (DEBUG_OP)
98 target_ulong sav
= tmp
;
101 switch (GET_LMASK(T0
)) {
103 tmp
= (tmp
& 0x00FFFFFF) | (T1
<< 24);
106 tmp
= (tmp
& 0x0000FFFF) | (T1
<< 16);
109 tmp
= (tmp
& 0x000000FF) | (T1
<< 8);
115 #if defined (DEBUG_OP)
117 fprintf(logfile
, "%s: %08x - %08x %08x => %08x\n",
118 __func__
, T0
, sav
, T1
, tmp
);
125 #ifdef MIPS_HAS_MIPS64
127 # ifdef TARGET_WORDS_BIGENDIAN
128 #define GET_LMASK64(v) ((v) & 4)
130 #define GET_LMASK64(v) (((v) & 4) ^ 4)
133 void glue(do_ldl
, MEMSUFFIX
) (uint64_t tmp
)
135 #if defined (DEBUG_OP)
136 target_ulong sav
= T0
;
139 switch (GET_LMASK64(T0
)) {
144 T0
= (tmp
<< 8) | (T1
& 0x00000000000000FFULL
);
147 T0
= (tmp
<< 16) | (T1
& 0x000000000000FFFFULL
);
150 T0
= (tmp
<< 24) | (T1
& 0x0000000000FFFFFFULL
);
153 T0
= (tmp
<< 32) | (T1
& 0x00000000FFFFFFFFULL
);
156 T0
= (tmp
<< 40) | (T1
& 0x000000FFFFFFFFFFULL
);
159 T0
= (tmp
<< 48) | (T1
& 0x0000FFFFFFFFFFFFULL
);
162 T0
= (tmp
<< 56) | (T1
& 0x00FFFFFFFFFFFFFFULL
);
165 #if defined (DEBUG_OP)
167 fprintf(logfile
, "%s: %08x - %08x %08x => %08x\n",
168 __func__
, sav
, tmp
, T1
, T0
);
174 void glue(do_ldr
, MEMSUFFIX
) (uint64_t tmp
)
176 #if defined (DEBUG_OP)
177 target_ulong sav
= T0
;
180 switch (GET_LMASK64(T0
)) {
182 T0
= (tmp
>> 56) | (T1
& 0xFFFFFFFFFFFFFF00ULL
);
185 T0
= (tmp
>> 48) | (T1
& 0xFFFFFFFFFFFF0000ULL
);
188 T0
= (tmp
>> 40) | (T1
& 0xFFFFFFFFFF000000ULL
);
191 T0
= (tmp
>> 32) | (T1
& 0xFFFFFFFF00000000ULL
);
194 T0
= (tmp
>> 24) | (T1
& 0xFFFFFF0000000000ULL
);
197 T0
= (tmp
>> 16) | (T1
& 0xFFFF000000000000ULL
);
200 T0
= (tmp
>> 8) | (T1
& 0xFF00000000000000ULL
);
206 #if defined (DEBUG_OP)
208 fprintf(logfile
, "%s: %08x - %08x %08x => %08x\n",
209 __func__
, sav
, tmp
, T1
, T0
);
215 uint64_t glue(do_sdl
, MEMSUFFIX
) (uint64_t tmp
)
217 #if defined (DEBUG_OP)
218 target_ulong sav
= tmp
;
221 switch (GET_LMASK64(T0
)) {
226 tmp
= (tmp
& 0xFF00000000000000ULL
) | (T1
>> 8);
229 tmp
= (tmp
& 0xFFFF000000000000ULL
) | (T1
>> 16);
232 tmp
= (tmp
& 0xFFFFFF0000000000ULL
) | (T1
>> 24);
235 tmp
= (tmp
& 0xFFFFFFFF00000000ULL
) | (T1
>> 32);
238 tmp
= (tmp
& 0xFFFFFFFFFF000000ULL
) | (T1
>> 40);
241 tmp
= (tmp
& 0xFFFFFFFFFFFF0000ULL
) | (T1
>> 48);
244 tmp
= (tmp
& 0xFFFFFFFFFFFFFF00ULL
) | (T1
>> 56);
247 #if defined (DEBUG_OP)
249 fprintf(logfile
, "%s: %08x - %08x %08x => %08x\n",
250 __func__
, T0
, sav
, T1
, tmp
);
257 uint64_t glue(do_sdr
, MEMSUFFIX
) (uint64_t tmp
)
259 #if defined (DEBUG_OP)
260 target_ulong sav
= tmp
;
263 switch (GET_LMASK64(T0
)) {
265 tmp
= (tmp
& 0x00FFFFFFFFFFFFFFULL
) | (T1
<< 56);
268 tmp
= (tmp
& 0x0000FFFFFFFFFFFFULL
) | (T1
<< 48);
271 tmp
= (tmp
& 0x000000FFFFFFFFFFULL
) | (T1
<< 40);
274 tmp
= (tmp
& 0x00000000FFFFFFFFULL
) | (T1
<< 32);
277 tmp
= (tmp
& 0x0000000000FFFFFFULL
) | (T1
<< 24);
280 tmp
= (tmp
& 0x000000000000FFFFULL
) | (T1
<< 16);
283 tmp
= (tmp
& 0x00000000000000FFULL
) | (T1
<< 8);
289 #if defined (DEBUG_OP)
291 fprintf(logfile
, "%s: %08x - %08x %08x => %08x\n",
292 __func__
, T0
, sav
, T1
, tmp
);
299 #endif /* MIPS_HAS_MIPS64 */