2 |
void glue(do_lsw, MEMSUFFIX) (int dst); |
void glue(do_lsw, MEMSUFFIX) (int dst); |
3 |
void glue(do_stsw, MEMSUFFIX) (int src); |
void glue(do_stsw, MEMSUFFIX) (int src); |
4 |
|
|
5 |
static inline uint16_t glue(ld16r, MEMSUFFIX) (void *EA) |
static inline uint16_t glue(ld16r, MEMSUFFIX) (target_ulong EA) |
6 |
{ |
{ |
7 |
uint16_t tmp = glue(lduw, MEMSUFFIX)(EA); |
uint16_t tmp = glue(lduw, MEMSUFFIX)(EA); |
8 |
return ((tmp & 0xFF00) >> 8) | ((tmp & 0x00FF) << 8); |
return ((tmp & 0xFF00) >> 8) | ((tmp & 0x00FF) << 8); |
9 |
} |
} |
10 |
|
|
11 |
static inline uint32_t glue(ld32r, MEMSUFFIX) (void *EA) |
static inline uint32_t glue(ld32r, MEMSUFFIX) (target_ulong EA) |
12 |
{ |
{ |
13 |
uint32_t tmp = glue(ldl, MEMSUFFIX)(EA); |
uint32_t tmp = glue(ldl, MEMSUFFIX)(EA); |
14 |
return ((tmp & 0xFF000000) >> 24) | ((tmp & 0x00FF0000) >> 8) | |
return ((tmp & 0xFF000000) >> 24) | ((tmp & 0x00FF0000) >> 8) | |
15 |
((tmp & 0x0000FF00) << 8) | ((tmp & 0x000000FF) << 24); |
((tmp & 0x0000FF00) << 8) | ((tmp & 0x000000FF) << 24); |
16 |
} |
} |
17 |
|
|
18 |
static inline void glue(st16r, MEMSUFFIX) (void *EA, uint16_t data) |
static inline void glue(st16r, MEMSUFFIX) (target_ulong EA, uint16_t data) |
19 |
{ |
{ |
20 |
uint16_t tmp = ((data & 0xFF00) >> 8) | ((data & 0x00FF) << 8); |
uint16_t tmp = ((data & 0xFF00) >> 8) | ((data & 0x00FF) << 8); |
21 |
glue(stw, MEMSUFFIX)(EA, tmp); |
glue(stw, MEMSUFFIX)(EA, tmp); |
22 |
} |
} |
23 |
|
|
24 |
static inline void glue(st32r, MEMSUFFIX) (void *EA, uint32_t data) |
static inline void glue(st32r, MEMSUFFIX) (target_ulong EA, uint32_t data) |
25 |
{ |
{ |
26 |
uint32_t tmp = ((data & 0xFF000000) >> 24) | ((data & 0x00FF0000) >> 8) | |
uint32_t tmp = ((data & 0xFF000000) >> 24) | ((data & 0x00FF0000) >> 8) | |
27 |
((data & 0x0000FF00) << 8) | ((data & 0x000000FF) << 24); |
((data & 0x0000FF00) << 8) | ((data & 0x000000FF) << 24); |
32 |
#define PPC_LD_OP(name, op) \ |
#define PPC_LD_OP(name, op) \ |
33 |
PPC_OP(glue(glue(l, name), MEMSUFFIX)) \ |
PPC_OP(glue(glue(l, name), MEMSUFFIX)) \ |
34 |
{ \ |
{ \ |
35 |
T1 = glue(op, MEMSUFFIX)((void *)T0); \ |
T1 = glue(op, MEMSUFFIX)(T0); \ |
36 |
RETURN(); \ |
RETURN(); \ |
37 |
} |
} |
38 |
|
|
39 |
#define PPC_ST_OP(name, op) \ |
#define PPC_ST_OP(name, op) \ |
40 |
PPC_OP(glue(glue(st, name), MEMSUFFIX)) \ |
PPC_OP(glue(glue(st, name), MEMSUFFIX)) \ |
41 |
{ \ |
{ \ |
42 |
glue(op, MEMSUFFIX)((void *)T0, T1); \ |
glue(op, MEMSUFFIX)(T0, T1); \ |
43 |
RETURN(); \ |
RETURN(); \ |
44 |
} |
} |
45 |
|
|
65 |
int dst = PARAM(1); |
int dst = PARAM(1); |
66 |
|
|
67 |
for (; dst < 32; dst++, T0 += 4) { |
for (; dst < 32; dst++, T0 += 4) { |
68 |
ugpr(dst) = glue(ldl, MEMSUFFIX)((void *)T0); |
ugpr(dst) = glue(ldl, MEMSUFFIX)(T0); |
69 |
} |
} |
70 |
RETURN(); |
RETURN(); |
71 |
} |
} |
75 |
int src = PARAM(1); |
int src = PARAM(1); |
76 |
|
|
77 |
for (; src < 32; src++, T0 += 4) { |
for (; src < 32; src++, T0 += 4) { |
78 |
glue(stl, MEMSUFFIX)((void *)T0, ugpr(src)); |
glue(stl, MEMSUFFIX)(T0, ugpr(src)); |
79 |
} |
} |
80 |
RETURN(); |
RETURN(); |
81 |
} |
} |
115 |
#define PPC_STF_OP(name, op) \ |
#define PPC_STF_OP(name, op) \ |
116 |
PPC_OP(glue(glue(st, name), MEMSUFFIX)) \ |
PPC_OP(glue(glue(st, name), MEMSUFFIX)) \ |
117 |
{ \ |
{ \ |
118 |
glue(op, MEMSUFFIX)((void *)T0, FT1); \ |
glue(op, MEMSUFFIX)(T0, FT1); \ |
119 |
RETURN(); \ |
RETURN(); \ |
120 |
} |
} |
121 |
|
|
126 |
#define PPC_LDF_OP(name, op) \ |
#define PPC_LDF_OP(name, op) \ |
127 |
PPC_OP(glue(glue(l, name), MEMSUFFIX)) \ |
PPC_OP(glue(glue(l, name), MEMSUFFIX)) \ |
128 |
{ \ |
{ \ |
129 |
FT1 = glue(op, MEMSUFFIX)((void *)T0); \ |
FT1 = glue(op, MEMSUFFIX)(T0); \ |
130 |
RETURN(); \ |
RETURN(); \ |
131 |
} |
} |
132 |
|
|
139 |
if (T0 & 0x03) { |
if (T0 & 0x03) { |
140 |
do_raise_exception(EXCP_ALIGN); |
do_raise_exception(EXCP_ALIGN); |
141 |
} else { |
} else { |
142 |
T1 = glue(ldl, MEMSUFFIX)((void *)T0); |
T1 = glue(ldl, MEMSUFFIX)(T0); |
143 |
regs->reserve = T0; |
regs->reserve = T0; |
144 |
} |
} |
145 |
RETURN(); |
RETURN(); |
154 |
if (regs->reserve != T0) { |
if (regs->reserve != T0) { |
155 |
env->crf[0] = xer_ov; |
env->crf[0] = xer_ov; |
156 |
} else { |
} else { |
157 |
glue(stl, MEMSUFFIX)((void *)T0, T1); |
glue(stl, MEMSUFFIX)(T0, T1); |
158 |
env->crf[0] = xer_ov | 0x02; |
env->crf[0] = xer_ov | 0x02; |
159 |
} |
} |
160 |
} |
} |
164 |
|
|
165 |
PPC_OP(glue(dcbz, MEMSUFFIX)) |
PPC_OP(glue(dcbz, MEMSUFFIX)) |
166 |
{ |
{ |
167 |
glue(stl, MEMSUFFIX)((void *)(T0 + 0x00), 0); |
glue(stl, MEMSUFFIX)(T0 + 0x00, 0); |
168 |
glue(stl, MEMSUFFIX)((void *)(T0 + 0x04), 0); |
glue(stl, MEMSUFFIX)(T0 + 0x04, 0); |
169 |
glue(stl, MEMSUFFIX)((void *)(T0 + 0x08), 0); |
glue(stl, MEMSUFFIX)(T0 + 0x08, 0); |
170 |
glue(stl, MEMSUFFIX)((void *)(T0 + 0x0C), 0); |
glue(stl, MEMSUFFIX)(T0 + 0x0C, 0); |
171 |
glue(stl, MEMSUFFIX)((void *)(T0 + 0x10), 0); |
glue(stl, MEMSUFFIX)(T0 + 0x10, 0); |
172 |
glue(stl, MEMSUFFIX)((void *)(T0 + 0x14), 0); |
glue(stl, MEMSUFFIX)(T0 + 0x14, 0); |
173 |
glue(stl, MEMSUFFIX)((void *)(T0 + 0x18), 0); |
glue(stl, MEMSUFFIX)(T0 + 0x18, 0); |
174 |
glue(stl, MEMSUFFIX)((void *)(T0 + 0x1C), 0); |
glue(stl, MEMSUFFIX)(T0 + 0x1C, 0); |
175 |
RETURN(); |
RETURN(); |
176 |
} |
} |
177 |
|
|
178 |
/* External access */ |
/* External access */ |
179 |
PPC_OP(glue(eciwx, MEMSUFFIX)) |
PPC_OP(glue(eciwx, MEMSUFFIX)) |
180 |
{ |
{ |
181 |
T1 = glue(ldl, MEMSUFFIX)((void *)T0); |
T1 = glue(ldl, MEMSUFFIX)(T0); |
182 |
RETURN(); |
RETURN(); |
183 |
} |
} |
184 |
|
|
185 |
PPC_OP(glue(ecowx, MEMSUFFIX)) |
PPC_OP(glue(ecowx, MEMSUFFIX)) |
186 |
{ |
{ |
187 |
glue(stl, MEMSUFFIX)((void *)T0, T1); |
glue(stl, MEMSUFFIX)(T0, T1); |
188 |
RETURN(); |
RETURN(); |
189 |
} |
} |
190 |
|
|