]>
Commit | Line | Data |
---|---|---|
3a3f24fc TS |
1 | #undef DEBUG_OP |
2 | ||
9f25f11f FB |
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 | ||
4ad40f36 | 9 | void glue(do_lwl, MEMSUFFIX) (uint32_t tmp) |
6af0bf9c FB |
10 | { |
11 | #if defined (DEBUG_OP) | |
12 | target_ulong sav = T0; | |
13 | #endif | |
6af0bf9c | 14 | |
9f25f11f | 15 | switch (GET_LMASK(T0)) { |
6af0bf9c | 16 | case 0: |
3a3f24fc | 17 | T0 = (int32_t)tmp; |
6af0bf9c FB |
18 | break; |
19 | case 1: | |
3a3f24fc | 20 | T0 = (int32_t)((tmp << 8) | (T1 & 0x000000FF)); |
6af0bf9c FB |
21 | break; |
22 | case 2: | |
3a3f24fc | 23 | T0 = (int32_t)((tmp << 16) | (T1 & 0x0000FFFF)); |
6af0bf9c FB |
24 | break; |
25 | case 3: | |
3a3f24fc | 26 | T0 = (int32_t)((tmp << 24) | (T1 & 0x00FFFFFF)); |
6af0bf9c FB |
27 | break; |
28 | } | |
29 | #if defined (DEBUG_OP) | |
30 | if (logfile) { | |
3594c774 | 31 | fprintf(logfile, "%s: " TARGET_FMT_lx " - %08x " TARGET_FMT_lx " => " TARGET_FMT_lx "\n", |
6af0bf9c FB |
32 | __func__, sav, tmp, T1, T0); |
33 | } | |
34 | #endif | |
35 | RETURN(); | |
36 | } | |
37 | ||
4ad40f36 | 38 | void glue(do_lwr, MEMSUFFIX) (uint32_t tmp) |
6af0bf9c FB |
39 | { |
40 | #if defined (DEBUG_OP) | |
41 | target_ulong sav = T0; | |
42 | #endif | |
6af0bf9c | 43 | |
9f25f11f | 44 | switch (GET_LMASK(T0)) { |
6af0bf9c | 45 | case 0: |
3a3f24fc | 46 | T0 = (int32_t)((tmp >> 24) | (T1 & 0xFFFFFF00)); |
6af0bf9c FB |
47 | break; |
48 | case 1: | |
3a3f24fc | 49 | T0 = (int32_t)((tmp >> 16) | (T1 & 0xFFFF0000)); |
6af0bf9c FB |
50 | break; |
51 | case 2: | |
3a3f24fc | 52 | T0 = (int32_t)((tmp >> 8) | (T1 & 0xFF000000)); |
6af0bf9c FB |
53 | break; |
54 | case 3: | |
3a3f24fc | 55 | T0 = (int32_t)tmp; |
6af0bf9c FB |
56 | break; |
57 | } | |
58 | #if defined (DEBUG_OP) | |
59 | if (logfile) { | |
3594c774 | 60 | fprintf(logfile, "%s: " TARGET_FMT_lx " - %08x " TARGET_FMT_lx " => " TARGET_FMT_lx "\n", |
6af0bf9c FB |
61 | __func__, sav, tmp, T1, T0); |
62 | } | |
63 | #endif | |
64 | RETURN(); | |
65 | } | |
66 | ||
4ad40f36 | 67 | uint32_t glue(do_swl, MEMSUFFIX) (uint32_t tmp) |
6af0bf9c FB |
68 | { |
69 | #if defined (DEBUG_OP) | |
c570fd16 | 70 | target_ulong sav = tmp; |
6af0bf9c | 71 | #endif |
6af0bf9c | 72 | |
9f25f11f | 73 | switch (GET_LMASK(T0)) { |
6af0bf9c | 74 | case 0: |
3a3f24fc | 75 | tmp = (int32_t)T1; |
6af0bf9c FB |
76 | break; |
77 | case 1: | |
3a3f24fc | 78 | tmp = (int32_t)((tmp & 0xFF000000) | ((uint32_t)T1 >> 8)); |
6af0bf9c FB |
79 | break; |
80 | case 2: | |
3a3f24fc | 81 | tmp = (int32_t)((tmp & 0xFFFF0000) | ((uint32_t)T1 >> 16)); |
6af0bf9c FB |
82 | break; |
83 | case 3: | |
3a3f24fc | 84 | tmp = (int32_t)((tmp & 0xFFFFFF00) | ((uint32_t)T1 >> 24)); |
6af0bf9c FB |
85 | break; |
86 | } | |
6af0bf9c FB |
87 | #if defined (DEBUG_OP) |
88 | if (logfile) { | |
3594c774 | 89 | fprintf(logfile, "%s: " TARGET_FMT_lx " - " TARGET_FMT_lx " " TARGET_FMT_lx " => %08x\n", |
6af0bf9c FB |
90 | __func__, T0, sav, T1, tmp); |
91 | } | |
92 | #endif | |
93 | RETURN(); | |
4ad40f36 | 94 | return tmp; |
6af0bf9c FB |
95 | } |
96 | ||
4ad40f36 | 97 | uint32_t glue(do_swr, MEMSUFFIX) (uint32_t tmp) |
6af0bf9c FB |
98 | { |
99 | #if defined (DEBUG_OP) | |
c570fd16 | 100 | target_ulong sav = tmp; |
6af0bf9c | 101 | #endif |
6af0bf9c | 102 | |
9f25f11f | 103 | switch (GET_LMASK(T0)) { |
6af0bf9c | 104 | case 0: |
3a3f24fc | 105 | tmp = (int32_t)((tmp & 0x00FFFFFF) | (T1 << 24)); |
6af0bf9c FB |
106 | break; |
107 | case 1: | |
3a3f24fc | 108 | tmp = (int32_t)((tmp & 0x0000FFFF) | (T1 << 16)); |
6af0bf9c FB |
109 | break; |
110 | case 2: | |
3a3f24fc | 111 | tmp = (int32_t)((tmp & 0x000000FF) | (T1 << 8)); |
6af0bf9c FB |
112 | break; |
113 | case 3: | |
3a3f24fc | 114 | tmp = (int32_t)T1; |
6af0bf9c FB |
115 | break; |
116 | } | |
6af0bf9c FB |
117 | #if defined (DEBUG_OP) |
118 | if (logfile) { | |
3594c774 | 119 | fprintf(logfile, "%s: " TARGET_FMT_lx " - " TARGET_FMT_lx " " TARGET_FMT_lx " => %08x\n", |
6af0bf9c FB |
120 | __func__, T0, sav, T1, tmp); |
121 | } | |
122 | #endif | |
123 | RETURN(); | |
4ad40f36 | 124 | return tmp; |
6af0bf9c | 125 | } |
c570fd16 | 126 | |
60aa19ab | 127 | #ifdef TARGET_MIPS64 |
c570fd16 TS |
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) { | |
3594c774 | 169 | fprintf(logfile, "%s: " TARGET_FMT_lx " - " TARGET_FMT_lx " " TARGET_FMT_lx " => " TARGET_FMT_lx "\n", |
c570fd16 TS |
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) { | |
3594c774 | 210 | fprintf(logfile, "%s: " TARGET_FMT_lx " - " TARGET_FMT_lx " " TARGET_FMT_lx " => " TARGET_FMT_lx "\n", |
c570fd16 TS |
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) { | |
3594c774 | 251 | fprintf(logfile, "%s: " TARGET_FMT_lx " - " TARGET_FMT_lx " " TARGET_FMT_lx " => " TARGET_FMT_lx "\n", |
c570fd16 TS |
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) { | |
3594c774 | 293 | fprintf(logfile, "%s: " TARGET_FMT_lx " - " TARGET_FMT_lx " " TARGET_FMT_lx " => " TARGET_FMT_lx "\n", |
c570fd16 TS |
294 | __func__, T0, sav, T1, tmp); |
295 | } | |
296 | #endif | |
297 | RETURN(); | |
298 | return tmp; | |
299 | } | |
300 | ||
60aa19ab | 301 | #endif /* TARGET_MIPS64 */ |