Revision c570fd16 target-mips/op_helper_mem.c

b/target-mips/op_helper_mem.c
10 10
    target_ulong sav = T0;
11 11
#endif
12 12

  
13
    /* XXX: this is valid only in big-endian mode
14
     *      should be reverted for little-endian...
15
     */
16 13
    switch (GET_LMASK(T0)) {
17 14
    case 0:
18 15
        T0 = tmp;
......
42 39
    target_ulong sav = T0;
43 40
#endif
44 41

  
45
    /* XXX: this is valid only in big-endian mode
46
     *      should be reverted for little-endian...
47
     */
48 42
    switch (GET_LMASK(T0)) {
49 43
    case 0:
50 44
        T0 = (tmp >> 24) | (T1 & 0xFFFFFF00);
......
71 65
uint32_t glue(do_swl, MEMSUFFIX) (uint32_t tmp)
72 66
{
73 67
#if defined (DEBUG_OP)
74
    target_ulong sav;
68
    target_ulong sav = tmp;
75 69
#endif
76 70

  
77
#if defined (DEBUG_OP)
78
    sav = tmp;
79
#endif
80
    /* XXX: this is valid only in big-endian mode
81
     *      should be reverted for little-endian...
82
     */
83 71
    switch (GET_LMASK(T0)) {
84 72
    case 0:
85 73
        tmp = T1;
......
107 95
uint32_t glue(do_swr, MEMSUFFIX) (uint32_t tmp)
108 96
{
109 97
#if defined (DEBUG_OP)
110
    target_ulong sav;
98
    target_ulong sav = tmp;
111 99
#endif
112 100

  
113
#if defined (DEBUG_OP)
114
    sav = tmp;
115
#endif
116
    /* XXX: this is valid only in big-endian mode
117
     *      should be reverted for little-endian...
118
     */
119 101
    switch (GET_LMASK(T0)) {
120 102
    case 0:
121 103
        tmp = (tmp & 0x00FFFFFF) | (T1 << 24);
......
139 121
    RETURN();
140 122
    return tmp;
141 123
}
124

  
125
#ifdef MIPS_HAS_MIPS64
126

  
127
# ifdef TARGET_WORDS_BIGENDIAN
128
#define GET_LMASK64(v) ((v) & 4)
129
#else
130
#define GET_LMASK64(v) (((v) & 4) ^ 4)
131
#endif
132

  
133
void glue(do_ldl, MEMSUFFIX) (uint64_t tmp)
134
{
135
#if defined (DEBUG_OP)
136
    target_ulong sav = T0;
137
#endif
138

  
139
    switch (GET_LMASK64(T0)) {
140
    case 0:
141
        T0 = tmp;
142
        break;
143
    case 1:
144
        T0 = (tmp << 8) | (T1 & 0x00000000000000FFULL);
145
        break;
146
    case 2:
147
        T0 = (tmp << 16) | (T1 & 0x000000000000FFFFULL);
148
        break;
149
    case 3:
150
        T0 = (tmp << 24) | (T1 & 0x0000000000FFFFFFULL);
151
        break;
152
    case 4:
153
        T0 = (tmp << 32) | (T1 & 0x00000000FFFFFFFFULL);
154
        break;
155
    case 5:
156
        T0 = (tmp << 40) | (T1 & 0x000000FFFFFFFFFFULL);
157
        break;
158
    case 6:
159
        T0 = (tmp << 48) | (T1 & 0x0000FFFFFFFFFFFFULL);
160
        break;
161
    case 7:
162
        T0 = (tmp << 56) | (T1 & 0x00FFFFFFFFFFFFFFULL);
163
        break;
164
    }
165
#if defined (DEBUG_OP)
166
    if (logfile) {
167
        fprintf(logfile, "%s: %08x - %08x %08x => %08x\n",
168
                __func__, sav, tmp, T1, T0);
169
    }
170
#endif
171
    RETURN();
172
}
173

  
174
void glue(do_ldr, MEMSUFFIX) (uint64_t tmp)
175
{
176
#if defined (DEBUG_OP)
177
    target_ulong sav = T0;
178
#endif
179

  
180
    switch (GET_LMASK64(T0)) {
181
    case 0:
182
        T0 = (tmp >> 56) | (T1 & 0xFFFFFFFFFFFFFF00ULL);
183
        break;
184
    case 1:
185
        T0 = (tmp >> 48) | (T1 & 0xFFFFFFFFFFFF0000ULL);
186
        break;
187
    case 2:
188
        T0 = (tmp >> 40) | (T1 & 0xFFFFFFFFFF000000ULL);
189
        break;
190
    case 3:
191
        T0 = (tmp >> 32) | (T1 & 0xFFFFFFFF00000000ULL);
192
        break;
193
    case 4:
194
        T0 = (tmp >> 24) | (T1 & 0xFFFFFF0000000000ULL);
195
        break;
196
    case 5:
197
        T0 = (tmp >> 16) | (T1 & 0xFFFF000000000000ULL);
198
        break;
199
    case 6:
200
        T0 = (tmp >> 8) | (T1 & 0xFF00000000000000ULL);
201
        break;
202
    case 7:
203
        T0 = tmp;
204
        break;
205
    }
206
#if defined (DEBUG_OP)
207
    if (logfile) {
208
        fprintf(logfile, "%s: %08x - %08x %08x => %08x\n",
209
                __func__, sav, tmp, T1, T0);
210
    }
211
#endif
212
    RETURN();
213
}
214

  
215
uint64_t glue(do_sdl, MEMSUFFIX) (uint64_t tmp)
216
{
217
#if defined (DEBUG_OP)
218
    target_ulong sav = tmp;
219
#endif
220

  
221
    switch (GET_LMASK64(T0)) {
222
    case 0:
223
        tmp = T1;
224
        break;
225
    case 1:
226
        tmp = (tmp & 0xFF00000000000000ULL) | (T1 >> 8);
227
        break;
228
    case 2:
229
        tmp = (tmp & 0xFFFF000000000000ULL) | (T1 >> 16);
230
        break;
231
    case 3:
232
        tmp = (tmp & 0xFFFFFF0000000000ULL) | (T1 >> 24);
233
        break;
234
    case 4:
235
        tmp = (tmp & 0xFFFFFFFF00000000ULL) | (T1 >> 32);
236
        break;
237
    case 5:
238
        tmp = (tmp & 0xFFFFFFFFFF000000ULL) | (T1 >> 40);
239
        break;
240
    case 6:
241
        tmp = (tmp & 0xFFFFFFFFFFFF0000ULL) | (T1 >> 48);
242
        break;
243
    case 7:
244
        tmp = (tmp & 0xFFFFFFFFFFFFFF00ULL) | (T1 >> 56);
245
        break;
246
    }
247
#if defined (DEBUG_OP)
248
    if (logfile) {
249
        fprintf(logfile, "%s: %08x - %08x %08x => %08x\n",
250
                __func__, T0, sav, T1, tmp);
251
    }
252
#endif
253
    RETURN();
254
    return tmp;
255
}
256

  
257
uint64_t glue(do_sdr, MEMSUFFIX) (uint64_t tmp)
258
{
259
#if defined (DEBUG_OP)
260
    target_ulong sav = tmp;
261
#endif
262

  
263
    switch (GET_LMASK64(T0)) {
264
    case 0:
265
        tmp = (tmp & 0x00FFFFFFFFFFFFFFULL) | (T1 << 56);
266
        break;
267
    case 1:
268
        tmp = (tmp & 0x0000FFFFFFFFFFFFULL) | (T1 << 48);
269
        break;
270
    case 2:
271
        tmp = (tmp & 0x000000FFFFFFFFFFULL) | (T1 << 40);
272
        break;
273
    case 3:
274
        tmp = (tmp & 0x00000000FFFFFFFFULL) | (T1 << 32);
275
        break;
276
    case 4:
277
        tmp = (tmp & 0x0000000000FFFFFFULL) | (T1 << 24);
278
        break;
279
    case 5:
280
        tmp = (tmp & 0x000000000000FFFFULL) | (T1 << 16);
281
        break;
282
    case 6:
283
        tmp = (tmp & 0x00000000000000FFULL) | (T1 << 8);
284
        break;
285
    case 7:
286
        tmp = T1;
287
        break;
288
    }
289
#if defined (DEBUG_OP)
290
    if (logfile) {
291
        fprintf(logfile, "%s: %08x - %08x %08x => %08x\n",
292
                __func__, T0, sav, T1, tmp);
293
    }
294
#endif
295
    RETURN();
296
    return tmp;
297
}
298

  
299
#endif /* MIPS_HAS_MIPS64 */

Also available in: Unified diff