darwin fix
[qemu/mdroth.git] / target-mips / op_helper_mem.c
blob6af78ce057c9e9947020910924ef1329c8314bbb
1 #undef DEBUG_OP
3 #ifdef TARGET_WORDS_BIGENDIAN
4 #define GET_LMASK(v) ((v) & 3)
5 #else
6 #define GET_LMASK(v) (((v) & 3) ^ 3)
7 #endif
9 void glue(do_lwl, MEMSUFFIX) (uint32_t tmp)
11 #if defined (DEBUG_OP)
12 target_ulong sav = T0;
13 #endif
15 switch (GET_LMASK(T0)) {
16 case 0:
17 T0 = (int32_t)tmp;
18 break;
19 case 1:
20 T0 = (int32_t)((tmp << 8) | (T1 & 0x000000FF));
21 break;
22 case 2:
23 T0 = (int32_t)((tmp << 16) | (T1 & 0x0000FFFF));
24 break;
25 case 3:
26 T0 = (int32_t)((tmp << 24) | (T1 & 0x00FFFFFF));
27 break;
29 #if defined (DEBUG_OP)
30 if (logfile) {
31 fprintf(logfile, "%s: " TLSZ " - %08x " TLSZ " => " TLSZ "\n",
32 __func__, sav, tmp, T1, T0);
34 #endif
35 RETURN();
38 void glue(do_lwr, MEMSUFFIX) (uint32_t tmp)
40 #if defined (DEBUG_OP)
41 target_ulong sav = T0;
42 #endif
44 switch (GET_LMASK(T0)) {
45 case 0:
46 T0 = (int32_t)((tmp >> 24) | (T1 & 0xFFFFFF00));
47 break;
48 case 1:
49 T0 = (int32_t)((tmp >> 16) | (T1 & 0xFFFF0000));
50 break;
51 case 2:
52 T0 = (int32_t)((tmp >> 8) | (T1 & 0xFF000000));
53 break;
54 case 3:
55 T0 = (int32_t)tmp;
56 break;
58 #if defined (DEBUG_OP)
59 if (logfile) {
60 fprintf(logfile, "%s: " TLSZ " - %08x " TLSZ " => " TLSZ "\n",
61 __func__, sav, tmp, T1, T0);
63 #endif
64 RETURN();
67 uint32_t glue(do_swl, MEMSUFFIX) (uint32_t tmp)
69 #if defined (DEBUG_OP)
70 target_ulong sav = tmp;
71 #endif
73 switch (GET_LMASK(T0)) {
74 case 0:
75 tmp = (int32_t)T1;
76 break;
77 case 1:
78 tmp = (int32_t)((tmp & 0xFF000000) | ((uint32_t)T1 >> 8));
79 break;
80 case 2:
81 tmp = (int32_t)((tmp & 0xFFFF0000) | ((uint32_t)T1 >> 16));
82 break;
83 case 3:
84 tmp = (int32_t)((tmp & 0xFFFFFF00) | ((uint32_t)T1 >> 24));
85 break;
87 #if defined (DEBUG_OP)
88 if (logfile) {
89 fprintf(logfile, "%s: " TLSZ " - " TLSZ " " TLSZ " => %08x\n",
90 __func__, T0, sav, T1, tmp);
92 #endif
93 RETURN();
94 return tmp;
97 uint32_t glue(do_swr, MEMSUFFIX) (uint32_t tmp)
99 #if defined (DEBUG_OP)
100 target_ulong sav = tmp;
101 #endif
103 switch (GET_LMASK(T0)) {
104 case 0:
105 tmp = (int32_t)((tmp & 0x00FFFFFF) | (T1 << 24));
106 break;
107 case 1:
108 tmp = (int32_t)((tmp & 0x0000FFFF) | (T1 << 16));
109 break;
110 case 2:
111 tmp = (int32_t)((tmp & 0x000000FF) | (T1 << 8));
112 break;
113 case 3:
114 tmp = (int32_t)T1;
115 break;
117 #if defined (DEBUG_OP)
118 if (logfile) {
119 fprintf(logfile, "%s: " TLSZ " - " TLSZ " " TLSZ " => %08x\n",
120 __func__, T0, sav, T1, tmp);
122 #endif
123 RETURN();
124 return tmp;
127 #ifdef MIPS_HAS_MIPS64
129 # ifdef TARGET_WORDS_BIGENDIAN
130 #define GET_LMASK64(v) ((v) & 4)
131 #else
132 #define GET_LMASK64(v) (((v) & 4) ^ 4)
133 #endif
135 void glue(do_ldl, MEMSUFFIX) (uint64_t tmp)
137 #if defined (DEBUG_OP)
138 target_ulong sav = T0;
139 #endif
141 switch (GET_LMASK64(T0)) {
142 case 0:
143 T0 = tmp;
144 break;
145 case 1:
146 T0 = (tmp << 8) | (T1 & 0x00000000000000FFULL);
147 break;
148 case 2:
149 T0 = (tmp << 16) | (T1 & 0x000000000000FFFFULL);
150 break;
151 case 3:
152 T0 = (tmp << 24) | (T1 & 0x0000000000FFFFFFULL);
153 break;
154 case 4:
155 T0 = (tmp << 32) | (T1 & 0x00000000FFFFFFFFULL);
156 break;
157 case 5:
158 T0 = (tmp << 40) | (T1 & 0x000000FFFFFFFFFFULL);
159 break;
160 case 6:
161 T0 = (tmp << 48) | (T1 & 0x0000FFFFFFFFFFFFULL);
162 break;
163 case 7:
164 T0 = (tmp << 56) | (T1 & 0x00FFFFFFFFFFFFFFULL);
165 break;
167 #if defined (DEBUG_OP)
168 if (logfile) {
169 fprintf(logfile, "%s: " TLSZ " - " TLSZ " " TLSZ " => " TLSZ "\n",
170 __func__, sav, tmp, T1, T0);
172 #endif
173 RETURN();
176 void glue(do_ldr, MEMSUFFIX) (uint64_t tmp)
178 #if defined (DEBUG_OP)
179 target_ulong sav = T0;
180 #endif
182 switch (GET_LMASK64(T0)) {
183 case 0:
184 T0 = (tmp >> 56) | (T1 & 0xFFFFFFFFFFFFFF00ULL);
185 break;
186 case 1:
187 T0 = (tmp >> 48) | (T1 & 0xFFFFFFFFFFFF0000ULL);
188 break;
189 case 2:
190 T0 = (tmp >> 40) | (T1 & 0xFFFFFFFFFF000000ULL);
191 break;
192 case 3:
193 T0 = (tmp >> 32) | (T1 & 0xFFFFFFFF00000000ULL);
194 break;
195 case 4:
196 T0 = (tmp >> 24) | (T1 & 0xFFFFFF0000000000ULL);
197 break;
198 case 5:
199 T0 = (tmp >> 16) | (T1 & 0xFFFF000000000000ULL);
200 break;
201 case 6:
202 T0 = (tmp >> 8) | (T1 & 0xFF00000000000000ULL);
203 break;
204 case 7:
205 T0 = tmp;
206 break;
208 #if defined (DEBUG_OP)
209 if (logfile) {
210 fprintf(logfile, "%s: " TLSZ " - " TLSZ " " TLSZ " => " TLSZ "\n",
211 __func__, sav, tmp, T1, T0);
213 #endif
214 RETURN();
217 uint64_t glue(do_sdl, MEMSUFFIX) (uint64_t tmp)
219 #if defined (DEBUG_OP)
220 target_ulong sav = tmp;
221 #endif
223 switch (GET_LMASK64(T0)) {
224 case 0:
225 tmp = T1;
226 break;
227 case 1:
228 tmp = (tmp & 0xFF00000000000000ULL) | (T1 >> 8);
229 break;
230 case 2:
231 tmp = (tmp & 0xFFFF000000000000ULL) | (T1 >> 16);
232 break;
233 case 3:
234 tmp = (tmp & 0xFFFFFF0000000000ULL) | (T1 >> 24);
235 break;
236 case 4:
237 tmp = (tmp & 0xFFFFFFFF00000000ULL) | (T1 >> 32);
238 break;
239 case 5:
240 tmp = (tmp & 0xFFFFFFFFFF000000ULL) | (T1 >> 40);
241 break;
242 case 6:
243 tmp = (tmp & 0xFFFFFFFFFFFF0000ULL) | (T1 >> 48);
244 break;
245 case 7:
246 tmp = (tmp & 0xFFFFFFFFFFFFFF00ULL) | (T1 >> 56);
247 break;
249 #if defined (DEBUG_OP)
250 if (logfile) {
251 fprintf(logfile, "%s: " TLSZ " - " TLSZ " " TLSZ " => " TLSZ "\n",
252 __func__, T0, sav, T1, tmp);
254 #endif
255 RETURN();
256 return tmp;
259 uint64_t glue(do_sdr, MEMSUFFIX) (uint64_t tmp)
261 #if defined (DEBUG_OP)
262 target_ulong sav = tmp;
263 #endif
265 switch (GET_LMASK64(T0)) {
266 case 0:
267 tmp = (tmp & 0x00FFFFFFFFFFFFFFULL) | (T1 << 56);
268 break;
269 case 1:
270 tmp = (tmp & 0x0000FFFFFFFFFFFFULL) | (T1 << 48);
271 break;
272 case 2:
273 tmp = (tmp & 0x000000FFFFFFFFFFULL) | (T1 << 40);
274 break;
275 case 3:
276 tmp = (tmp & 0x00000000FFFFFFFFULL) | (T1 << 32);
277 break;
278 case 4:
279 tmp = (tmp & 0x0000000000FFFFFFULL) | (T1 << 24);
280 break;
281 case 5:
282 tmp = (tmp & 0x000000000000FFFFULL) | (T1 << 16);
283 break;
284 case 6:
285 tmp = (tmp & 0x00000000000000FFULL) | (T1 << 8);
286 break;
287 case 7:
288 tmp = T1;
289 break;
291 #if defined (DEBUG_OP)
292 if (logfile) {
293 fprintf(logfile, "%s: " TLSZ " - " TLSZ " " TLSZ " => " TLSZ "\n",
294 __func__, T0, sav, T1, tmp);
296 #endif
297 RETURN();
298 return tmp;
301 #endif /* MIPS_HAS_MIPS64 */