Statistics
| Branch: | Revision:

root / target-ppc / op_mem.h @ 01a4afeb

History | View | Annotate | Download (17.5 kB)

1
/*
2
 *  PowerPC emulation micro-operations for qemu.
3
 *
4
 *  Copyright (c) 2003-2007 Jocelyn Mayer
5
 *
6
 * This library is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU Lesser General Public
8
 * License as published by the Free Software Foundation; either
9
 * version 2 of the License, or (at your option) any later version.
10
 *
11
 * This library is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14
 * Lesser General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU Lesser General Public
17
 * License along with this library; if not, write to the Free Software
18
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19
 */
20

    
21
#include "op_mem_access.h"
22

    
23
/***                    Integer load and store multiple                    ***/
24
void OPPROTO glue(op_lmw, MEMSUFFIX) (void)
25
{
26
    glue(do_lmw, MEMSUFFIX)(PARAM1);
27
    RETURN();
28
}
29

    
30
#if defined(TARGET_PPC64)
31
void OPPROTO glue(op_lmw_64, MEMSUFFIX) (void)
32
{
33
    glue(do_lmw_64, MEMSUFFIX)(PARAM1);
34
    RETURN();
35
}
36
#endif
37

    
38
void OPPROTO glue(op_lmw_le, MEMSUFFIX) (void)
39
{
40
    glue(do_lmw_le, MEMSUFFIX)(PARAM1);
41
    RETURN();
42
}
43

    
44
#if defined(TARGET_PPC64)
45
void OPPROTO glue(op_lmw_le_64, MEMSUFFIX) (void)
46
{
47
    glue(do_lmw_le_64, MEMSUFFIX)(PARAM1);
48
    RETURN();
49
}
50
#endif
51

    
52
void OPPROTO glue(op_stmw, MEMSUFFIX) (void)
53
{
54
    glue(do_stmw, MEMSUFFIX)(PARAM1);
55
    RETURN();
56
}
57

    
58
#if defined(TARGET_PPC64)
59
void OPPROTO glue(op_stmw_64, MEMSUFFIX) (void)
60
{
61
    glue(do_stmw_64, MEMSUFFIX)(PARAM1);
62
    RETURN();
63
}
64
#endif
65

    
66
void OPPROTO glue(op_stmw_le, MEMSUFFIX) (void)
67
{
68
    glue(do_stmw_le, MEMSUFFIX)(PARAM1);
69
    RETURN();
70
}
71

    
72
#if defined(TARGET_PPC64)
73
void OPPROTO glue(op_stmw_le_64, MEMSUFFIX) (void)
74
{
75
    glue(do_stmw_le_64, MEMSUFFIX)(PARAM1);
76
    RETURN();
77
}
78
#endif
79

    
80
/***                    Integer load and store strings                     ***/
81
void OPPROTO glue(op_lswi, MEMSUFFIX) (void)
82
{
83
    glue(do_lsw, MEMSUFFIX)(PARAM1);
84
    RETURN();
85
}
86

    
87
#if defined(TARGET_PPC64)
88
void OPPROTO glue(op_lswi_64, MEMSUFFIX) (void)
89
{
90
    glue(do_lsw_64, MEMSUFFIX)(PARAM1);
91
    RETURN();
92
}
93
#endif
94

    
95
/* PPC32 specification says we must generate an exception if
96
 * rA is in the range of registers to be loaded.
97
 * In an other hand, IBM says this is valid, but rA won't be loaded.
98
 * For now, I'll follow the spec...
99
 */
100
void OPPROTO glue(op_lswx, MEMSUFFIX) (void)
101
{
102
    /* Note: T1 comes from xer_bc then no cast is needed */
103
    if (likely(T1 != 0)) {
104
        if (unlikely((PARAM1 < PARAM2 && (PARAM1 + T1) > PARAM2) ||
105
                     (PARAM1 < PARAM3 && (PARAM1 + T1) > PARAM3))) {
106
            raise_exception_err(env, POWERPC_EXCP_PROGRAM,
107
                                POWERPC_EXCP_INVAL |
108
                                POWERPC_EXCP_INVAL_LSWX);
109
        } else {
110
            glue(do_lsw, MEMSUFFIX)(PARAM1);
111
        }
112
    }
113
    RETURN();
114
}
115

    
116
#if defined(TARGET_PPC64)
117
void OPPROTO glue(op_lswx_64, MEMSUFFIX) (void)
118
{
119
    /* Note: T1 comes from xer_bc then no cast is needed */
120
    if (likely(T1 != 0)) {
121
        if (unlikely((PARAM1 < PARAM2 && (PARAM1 + T1) > PARAM2) ||
122
                     (PARAM1 < PARAM3 && (PARAM1 + T1) > PARAM3))) {
123
            raise_exception_err(env, POWERPC_EXCP_PROGRAM,
124
                                POWERPC_EXCP_INVAL |
125
                                POWERPC_EXCP_INVAL_LSWX);
126
        } else {
127
            glue(do_lsw_64, MEMSUFFIX)(PARAM1);
128
        }
129
    }
130
    RETURN();
131
}
132
#endif
133

    
134
void OPPROTO glue(op_stsw, MEMSUFFIX) (void)
135
{
136
    glue(do_stsw, MEMSUFFIX)(PARAM1);
137
    RETURN();
138
}
139

    
140
#if defined(TARGET_PPC64)
141
void OPPROTO glue(op_stsw_64, MEMSUFFIX) (void)
142
{
143
    glue(do_stsw_64, MEMSUFFIX)(PARAM1);
144
    RETURN();
145
}
146
#endif
147

    
148
/* Load and set reservation */
149
void OPPROTO glue(op_lwarx, MEMSUFFIX) (void)
150
{
151
    if (unlikely(T0 & 0x03)) {
152
        raise_exception(env, POWERPC_EXCP_ALIGN);
153
    } else {
154
        T1 = glue(ldu32, MEMSUFFIX)((uint32_t)T0);
155
        env->reserve = (uint32_t)T0;
156
    }
157
    RETURN();
158
}
159

    
160
#if defined(TARGET_PPC64)
161
void OPPROTO glue(op_lwarx_64, MEMSUFFIX) (void)
162
{
163
    if (unlikely(T0 & 0x03)) {
164
        raise_exception(env, POWERPC_EXCP_ALIGN);
165
    } else {
166
        T1 = glue(ldu32, MEMSUFFIX)((uint64_t)T0);
167
        env->reserve = (uint64_t)T0;
168
    }
169
    RETURN();
170
}
171

    
172
void OPPROTO glue(op_ldarx, MEMSUFFIX) (void)
173
{
174
    if (unlikely(T0 & 0x03)) {
175
        raise_exception(env, POWERPC_EXCP_ALIGN);
176
    } else {
177
        T1 = glue(ldu64, MEMSUFFIX)((uint32_t)T0);
178
        env->reserve = (uint32_t)T0;
179
    }
180
    RETURN();
181
}
182

    
183
void OPPROTO glue(op_ldarx_64, MEMSUFFIX) (void)
184
{
185
    if (unlikely(T0 & 0x03)) {
186
        raise_exception(env, POWERPC_EXCP_ALIGN);
187
    } else {
188
        T1 = glue(ldu64, MEMSUFFIX)((uint64_t)T0);
189
        env->reserve = (uint64_t)T0;
190
    }
191
    RETURN();
192
}
193
#endif
194

    
195
void OPPROTO glue(op_lwarx_le, MEMSUFFIX) (void)
196
{
197
    if (unlikely(T0 & 0x03)) {
198
        raise_exception(env, POWERPC_EXCP_ALIGN);
199
    } else {
200
        T1 = glue(ldu32r, MEMSUFFIX)((uint32_t)T0);
201
        env->reserve = (uint32_t)T0;
202
    }
203
    RETURN();
204
}
205

    
206
#if defined(TARGET_PPC64)
207
void OPPROTO glue(op_lwarx_le_64, MEMSUFFIX) (void)
208
{
209
    if (unlikely(T0 & 0x03)) {
210
        raise_exception(env, POWERPC_EXCP_ALIGN);
211
    } else {
212
        T1 = glue(ldu32r, MEMSUFFIX)((uint64_t)T0);
213
        env->reserve = (uint64_t)T0;
214
    }
215
    RETURN();
216
}
217

    
218
void OPPROTO glue(op_ldarx_le, MEMSUFFIX) (void)
219
{
220
    if (unlikely(T0 & 0x03)) {
221
        raise_exception(env, POWERPC_EXCP_ALIGN);
222
    } else {
223
        T1 = glue(ldu64r, MEMSUFFIX)((uint32_t)T0);
224
        env->reserve = (uint32_t)T0;
225
    }
226
    RETURN();
227
}
228

    
229
void OPPROTO glue(op_ldarx_le_64, MEMSUFFIX) (void)
230
{
231
    if (unlikely(T0 & 0x03)) {
232
        raise_exception(env, POWERPC_EXCP_ALIGN);
233
    } else {
234
        T1 = glue(ldu64r, MEMSUFFIX)((uint64_t)T0);
235
        env->reserve = (uint64_t)T0;
236
    }
237
    RETURN();
238
}
239
#endif
240

    
241
/* Store with reservation */
242
void OPPROTO glue(op_stwcx, MEMSUFFIX) (void)
243
{
244
    if (unlikely(T0 & 0x03)) {
245
        raise_exception(env, POWERPC_EXCP_ALIGN);
246
    } else {
247
        if (unlikely(env->reserve != (uint32_t)T0)) {
248
            env->crf[0] = xer_so;
249
        } else {
250
            glue(st32, MEMSUFFIX)((uint32_t)T0, T1);
251
            env->crf[0] = xer_so | 0x02;
252
        }
253
    }
254
    env->reserve = (target_ulong)-1ULL;
255
    RETURN();
256
}
257

    
258
#if defined(TARGET_PPC64)
259
void OPPROTO glue(op_stwcx_64, MEMSUFFIX) (void)
260
{
261
    if (unlikely(T0 & 0x03)) {
262
        raise_exception(env, POWERPC_EXCP_ALIGN);
263
    } else {
264
        if (unlikely(env->reserve != (uint64_t)T0)) {
265
            env->crf[0] = xer_so;
266
        } else {
267
            glue(st32, MEMSUFFIX)((uint64_t)T0, T1);
268
            env->crf[0] = xer_so | 0x02;
269
        }
270
    }
271
    env->reserve = (target_ulong)-1ULL;
272
    RETURN();
273
}
274

    
275
void OPPROTO glue(op_stdcx, MEMSUFFIX) (void)
276
{
277
    if (unlikely(T0 & 0x03)) {
278
        raise_exception(env, POWERPC_EXCP_ALIGN);
279
    } else {
280
        if (unlikely(env->reserve != (uint32_t)T0)) {
281
            env->crf[0] = xer_so;
282
        } else {
283
            glue(st64, MEMSUFFIX)((uint32_t)T0, T1);
284
            env->crf[0] = xer_so | 0x02;
285
        }
286
    }
287
    env->reserve = (target_ulong)-1ULL;
288
    RETURN();
289
}
290

    
291
void OPPROTO glue(op_stdcx_64, MEMSUFFIX) (void)
292
{
293
    if (unlikely(T0 & 0x03)) {
294
        raise_exception(env, POWERPC_EXCP_ALIGN);
295
    } else {
296
        if (unlikely(env->reserve != (uint64_t)T0)) {
297
            env->crf[0] = xer_so;
298
        } else {
299
            glue(st64, MEMSUFFIX)((uint64_t)T0, T1);
300
            env->crf[0] = xer_so | 0x02;
301
        }
302
    }
303
    env->reserve = (target_ulong)-1ULL;
304
    RETURN();
305
}
306
#endif
307

    
308
void OPPROTO glue(op_stwcx_le, MEMSUFFIX) (void)
309
{
310
    if (unlikely(T0 & 0x03)) {
311
        raise_exception(env, POWERPC_EXCP_ALIGN);
312
    } else {
313
        if (unlikely(env->reserve != (uint32_t)T0)) {
314
            env->crf[0] = xer_so;
315
        } else {
316
            glue(st32r, MEMSUFFIX)((uint32_t)T0, T1);
317
            env->crf[0] = xer_so | 0x02;
318
        }
319
    }
320
    env->reserve = (target_ulong)-1ULL;
321
    RETURN();
322
}
323

    
324
#if defined(TARGET_PPC64)
325
void OPPROTO glue(op_stwcx_le_64, MEMSUFFIX) (void)
326
{
327
    if (unlikely(T0 & 0x03)) {
328
        raise_exception(env, POWERPC_EXCP_ALIGN);
329
    } else {
330
        if (unlikely(env->reserve != (uint64_t)T0)) {
331
            env->crf[0] = xer_so;
332
        } else {
333
            glue(st32r, MEMSUFFIX)((uint64_t)T0, T1);
334
            env->crf[0] = xer_so | 0x02;
335
        }
336
    }
337
    env->reserve = (target_ulong)-1ULL;
338
    RETURN();
339
}
340

    
341
void OPPROTO glue(op_stdcx_le, MEMSUFFIX) (void)
342
{
343
    if (unlikely(T0 & 0x03)) {
344
        raise_exception(env, POWERPC_EXCP_ALIGN);
345
    } else {
346
        if (unlikely(env->reserve != (uint32_t)T0)) {
347
            env->crf[0] = xer_so;
348
        } else {
349
            glue(st64r, MEMSUFFIX)((uint32_t)T0, T1);
350
            env->crf[0] = xer_so | 0x02;
351
        }
352
    }
353
    env->reserve = (target_ulong)-1ULL;
354
    RETURN();
355
}
356

    
357
void OPPROTO glue(op_stdcx_le_64, MEMSUFFIX) (void)
358
{
359
    if (unlikely(T0 & 0x03)) {
360
        raise_exception(env, POWERPC_EXCP_ALIGN);
361
    } else {
362
        if (unlikely(env->reserve != (uint64_t)T0)) {
363
            env->crf[0] = xer_so;
364
        } else {
365
            glue(st64r, MEMSUFFIX)((uint64_t)T0, T1);
366
            env->crf[0] = xer_so | 0x02;
367
        }
368
    }
369
    env->reserve = (target_ulong)-1ULL;
370
    RETURN();
371
}
372
#endif
373

    
374
void OPPROTO glue(op_dcbz_l32, MEMSUFFIX) (void)
375
{
376
    T0 &= ~((uint32_t)31);
377
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x00), 0);
378
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x04), 0);
379
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x08), 0);
380
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x0C), 0);
381
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x10), 0);
382
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x14), 0);
383
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x18), 0);
384
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x1C), 0);
385
    RETURN();
386
}
387

    
388
void OPPROTO glue(op_dcbz_l64, MEMSUFFIX) (void)
389
{
390
    T0 &= ~((uint32_t)63);
391
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x00), 0);
392
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x04), 0);
393
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x08), 0);
394
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x0C), 0);
395
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x10), 0);
396
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x14), 0);
397
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x18), 0);
398
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x1C), 0);
399
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x20UL), 0);
400
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x24UL), 0);
401
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x28UL), 0);
402
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x2CUL), 0);
403
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x30UL), 0);
404
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x34UL), 0);
405
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x38UL), 0);
406
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x3CUL), 0);
407
    RETURN();
408
}
409

    
410
void OPPROTO glue(op_dcbz_l128, MEMSUFFIX) (void)
411
{
412
    T0 &= ~((uint32_t)127);
413
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x00), 0);
414
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x04), 0);
415
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x08), 0);
416
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x0C), 0);
417
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x10), 0);
418
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x14), 0);
419
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x18), 0);
420
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x1C), 0);
421
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x20UL), 0);
422
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x24UL), 0);
423
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x28UL), 0);
424
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x2CUL), 0);
425
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x30UL), 0);
426
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x34UL), 0);
427
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x38UL), 0);
428
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x3CUL), 0);
429
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x40UL), 0);
430
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x44UL), 0);
431
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x48UL), 0);
432
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x4CUL), 0);
433
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x50UL), 0);
434
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x54UL), 0);
435
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x58UL), 0);
436
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x5CUL), 0);
437
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x60UL), 0);
438
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x64UL), 0);
439
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x68UL), 0);
440
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x6CUL), 0);
441
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x70UL), 0);
442
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x74UL), 0);
443
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x78UL), 0);
444
    glue(st32, MEMSUFFIX)((uint32_t)(T0 + 0x7CUL), 0);
445
    RETURN();
446
}
447

    
448
void OPPROTO glue(op_dcbz, MEMSUFFIX) (void)
449
{
450
    glue(do_dcbz, MEMSUFFIX)();
451
    RETURN();
452
}
453

    
454
#if defined(TARGET_PPC64)
455
void OPPROTO glue(op_dcbz_l32_64, MEMSUFFIX) (void)
456
{
457
    T0 &= ~((uint64_t)31);
458
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x00), 0);
459
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x04), 0);
460
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x08), 0);
461
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x0C), 0);
462
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x10), 0);
463
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x14), 0);
464
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x18), 0);
465
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x1C), 0);
466
    RETURN();
467
}
468

    
469
void OPPROTO glue(op_dcbz_l64_64, MEMSUFFIX) (void)
470
{
471
    T0 &= ~((uint64_t)63);
472
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x00), 0);
473
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x04), 0);
474
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x08), 0);
475
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x0C), 0);
476
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x10), 0);
477
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x14), 0);
478
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x18), 0);
479
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x1C), 0);
480
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x20UL), 0);
481
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x24UL), 0);
482
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x28UL), 0);
483
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x2CUL), 0);
484
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x30UL), 0);
485
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x34UL), 0);
486
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x38UL), 0);
487
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x3CUL), 0);
488
    RETURN();
489
}
490

    
491
void OPPROTO glue(op_dcbz_l128_64, MEMSUFFIX) (void)
492
{
493
    T0 &= ~((uint64_t)127);
494
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x00), 0);
495
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x04), 0);
496
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x08), 0);
497
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x0C), 0);
498
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x10), 0);
499
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x14), 0);
500
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x18), 0);
501
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x1C), 0);
502
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x20UL), 0);
503
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x24UL), 0);
504
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x28UL), 0);
505
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x2CUL), 0);
506
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x30UL), 0);
507
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x34UL), 0);
508
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x38UL), 0);
509
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x3CUL), 0);
510
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x40UL), 0);
511
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x44UL), 0);
512
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x48UL), 0);
513
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x4CUL), 0);
514
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x50UL), 0);
515
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x54UL), 0);
516
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x58UL), 0);
517
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x5CUL), 0);
518
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x60UL), 0);
519
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x64UL), 0);
520
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x68UL), 0);
521
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x6CUL), 0);
522
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x70UL), 0);
523
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x74UL), 0);
524
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x78UL), 0);
525
    glue(st32, MEMSUFFIX)((uint64_t)(T0 + 0x7CUL), 0);
526
    RETURN();
527
}
528

    
529
void OPPROTO glue(op_dcbz_64, MEMSUFFIX) (void)
530
{
531
    glue(do_dcbz_64, MEMSUFFIX)();
532
    RETURN();
533
}
534
#endif
535

    
536
/* Instruction cache block invalidate */
537
void OPPROTO glue(op_icbi, MEMSUFFIX) (void)
538
{
539
    glue(do_icbi, MEMSUFFIX)();
540
    RETURN();
541
}
542

    
543
#if defined(TARGET_PPC64)
544
void OPPROTO glue(op_icbi_64, MEMSUFFIX) (void)
545
{
546
    glue(do_icbi_64, MEMSUFFIX)();
547
    RETURN();
548
}
549
#endif
550

    
551
/* External access */
552
void OPPROTO glue(op_eciwx, MEMSUFFIX) (void)
553
{
554
    T1 = glue(ldu32, MEMSUFFIX)((uint32_t)T0);
555
    RETURN();
556
}
557

    
558
#if defined(TARGET_PPC64)
559
void OPPROTO glue(op_eciwx_64, MEMSUFFIX) (void)
560
{
561
    T1 = glue(ldu32, MEMSUFFIX)((uint64_t)T0);
562
    RETURN();
563
}
564
#endif
565

    
566
void OPPROTO glue(op_ecowx, MEMSUFFIX) (void)
567
{
568
    glue(st32, MEMSUFFIX)((uint32_t)T0, T1);
569
    RETURN();
570
}
571

    
572
#if defined(TARGET_PPC64)
573
void OPPROTO glue(op_ecowx_64, MEMSUFFIX) (void)
574
{
575
    glue(st32, MEMSUFFIX)((uint64_t)T0, T1);
576
    RETURN();
577
}
578
#endif
579

    
580
void OPPROTO glue(op_eciwx_le, MEMSUFFIX) (void)
581
{
582
    T1 = glue(ldu32r, MEMSUFFIX)((uint32_t)T0);
583
    RETURN();
584
}
585

    
586
#if defined(TARGET_PPC64)
587
void OPPROTO glue(op_eciwx_le_64, MEMSUFFIX) (void)
588
{
589
    T1 = glue(ldu32r, MEMSUFFIX)((uint64_t)T0);
590
    RETURN();
591
}
592
#endif
593

    
594
void OPPROTO glue(op_ecowx_le, MEMSUFFIX) (void)
595
{
596
    glue(st32r, MEMSUFFIX)((uint32_t)T0, T1);
597
    RETURN();
598
}
599

    
600
#if defined(TARGET_PPC64)
601
void OPPROTO glue(op_ecowx_le_64, MEMSUFFIX) (void)
602
{
603
    glue(st32r, MEMSUFFIX)((uint64_t)T0, T1);
604
    RETURN();
605
}
606
#endif
607

    
608
/* XXX: those micro-ops need tests ! */
609
/* PowerPC 601 specific instructions (POWER bridge) */
610
void OPPROTO glue(op_POWER_lscbx, MEMSUFFIX) (void)
611
{
612
    /* When byte count is 0, do nothing */
613
    if (likely(T1 != 0)) {
614
        glue(do_POWER_lscbx, MEMSUFFIX)(PARAM1, PARAM2, PARAM3);
615
    }
616
    RETURN();
617
}
618

    
619
#undef MEMSUFFIX