]> git.proxmox.com Git - qemu.git/blob - target-mips/op_helper_mem.c
Actually enable 64bit configuration.
[qemu.git] / target-mips / op_helper_mem.c
1 #undef DEBUG_OP
2
3 #ifdef TARGET_WORDS_BIGENDIAN
4 #define GET_LMASK(v) ((v) & 3)
5 #else
6 #define GET_LMASK(v) (((v) & 3) ^ 3)
7 #endif
8
9 void glue(do_lwl, MEMSUFFIX) (uint32_t tmp)
10 {
11 #if defined (DEBUG_OP)
12 target_ulong sav = T0;
13 #endif
14
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;
28 }
29 #if defined (DEBUG_OP)
30 if (logfile) {
31 fprintf(logfile, "%s: " TARGET_FMT_lx " - %08x " TARGET_FMT_lx " => " TARGET_FMT_lx "\n",
32 __func__, sav, tmp, T1, T0);
33 }
34 #endif
35 RETURN();
36 }
37
38 void glue(do_lwr, MEMSUFFIX) (uint32_t tmp)
39 {
40 #if defined (DEBUG_OP)
41 target_ulong sav = T0;
42 #endif
43
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;
57 }
58 #if defined (DEBUG_OP)
59 if (logfile) {
60 fprintf(logfile, "%s: " TARGET_FMT_lx " - %08x " TARGET_FMT_lx " => " TARGET_FMT_lx "\n",
61 __func__, sav, tmp, T1, T0);
62 }
63 #endif
64 RETURN();
65 }
66
67 uint32_t glue(do_swl, MEMSUFFIX) (uint32_t tmp)
68 {
69 #if defined (DEBUG_OP)
70 target_ulong sav = tmp;
71 #endif
72
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;
86 }
87 #if defined (DEBUG_OP)
88 if (logfile) {
89 fprintf(logfile, "%s: " TARGET_FMT_lx " - " TARGET_FMT_lx " " TARGET_FMT_lx " => %08x\n",
90 __func__, T0, sav, T1, tmp);
91 }
92 #endif
93 RETURN();
94 return tmp;
95 }
96
97 uint32_t glue(do_swr, MEMSUFFIX) (uint32_t tmp)
98 {
99 #if defined (DEBUG_OP)
100 target_ulong sav = tmp;
101 #endif
102
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;
116 }
117 #if defined (DEBUG_OP)
118 if (logfile) {
119 fprintf(logfile, "%s: " TARGET_FMT_lx " - " TARGET_FMT_lx " " TARGET_FMT_lx " => %08x\n",
120 __func__, T0, sav, T1, tmp);
121 }
122 #endif
123 RETURN();
124 return tmp;
125 }
126
127 #ifdef TARGET_MIPS64
128
129 # ifdef TARGET_WORDS_BIGENDIAN
130 #define GET_LMASK64(v) ((v) & 4)
131 #else
132 #define GET_LMASK64(v) (((v) & 4) ^ 4)
133 #endif
134
135 void glue(do_ldl, MEMSUFFIX) (uint64_t tmp)
136 {
137 #if defined (DEBUG_OP)
138 target_ulong sav = T0;
139 #endif
140
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;
166 }
167 #if defined (DEBUG_OP)
168 if (logfile) {
169 fprintf(logfile, "%s: " TARGET_FMT_lx " - " TARGET_FMT_lx " " TARGET_FMT_lx " => " TARGET_FMT_lx "\n",
170 __func__, sav, tmp, T1, T0);
171 }
172 #endif
173 RETURN();
174 }
175
176 void glue(do_ldr, MEMSUFFIX) (uint64_t tmp)
177 {
178 #if defined (DEBUG_OP)
179 target_ulong sav = T0;
180 #endif
181
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;
207 }
208 #if defined (DEBUG_OP)
209 if (logfile) {
210 fprintf(logfile, "%s: " TARGET_FMT_lx " - " TARGET_FMT_lx " " TARGET_FMT_lx " => " TARGET_FMT_lx "\n",
211 __func__, sav, tmp, T1, T0);
212 }
213 #endif
214 RETURN();
215 }
216
217 uint64_t glue(do_sdl, MEMSUFFIX) (uint64_t tmp)
218 {
219 #if defined (DEBUG_OP)
220 target_ulong sav = tmp;
221 #endif
222
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;
248 }
249 #if defined (DEBUG_OP)
250 if (logfile) {
251 fprintf(logfile, "%s: " TARGET_FMT_lx " - " TARGET_FMT_lx " " TARGET_FMT_lx " => " TARGET_FMT_lx "\n",
252 __func__, T0, sav, T1, tmp);
253 }
254 #endif
255 RETURN();
256 return tmp;
257 }
258
259 uint64_t glue(do_sdr, MEMSUFFIX) (uint64_t tmp)
260 {
261 #if defined (DEBUG_OP)
262 target_ulong sav = tmp;
263 #endif
264
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;
290 }
291 #if defined (DEBUG_OP)
292 if (logfile) {
293 fprintf(logfile, "%s: " TARGET_FMT_lx " - " TARGET_FMT_lx " " TARGET_FMT_lx " => " TARGET_FMT_lx "\n",
294 __func__, T0, sav, T1, tmp);
295 }
296 #endif
297 RETURN();
298 return tmp;
299 }
300
301 #endif /* TARGET_MIPS64 */