Revision 4d9903b6
b/target-ppc/helper.h | ||
---|---|---|
180 | 180 |
DEF_HELPER_3(vpkpx, void, avr, avr, avr) |
181 | 181 |
DEF_HELPER_4(vmhaddshs, void, avr, avr, avr, avr) |
182 | 182 |
DEF_HELPER_4(vmhraddshs, void, avr, avr, avr, avr) |
183 |
DEF_HELPER_4(vmsumuhm, void, avr, avr, avr, avr) |
|
184 |
DEF_HELPER_4(vmsumuhs, void, avr, avr, avr, avr) |
|
183 | 185 |
|
184 | 186 |
DEF_HELPER_1(efscfsi, i32, i32) |
185 | 187 |
DEF_HELPER_1(efscfui, i32, i32) |
b/target-ppc/op_helper.c | ||
---|---|---|
2180 | 2180 |
} |
2181 | 2181 |
} |
2182 | 2182 |
|
2183 |
void helper_vmsumuhm (ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, ppc_avr_t *c) |
|
2184 |
{ |
|
2185 |
uint32_t prod[8]; |
|
2186 |
int i; |
|
2187 |
|
|
2188 |
for (i = 0; i < ARRAY_SIZE(r->u16); i++) { |
|
2189 |
prod[i] = a->u16[i] * b->u16[i]; |
|
2190 |
} |
|
2191 |
|
|
2192 |
VECTOR_FOR_INORDER_I(i, u32) { |
|
2193 |
r->u32[i] = c->u32[i] + prod[2*i] + prod[2*i+1]; |
|
2194 |
} |
|
2195 |
} |
|
2196 |
|
|
2197 |
void helper_vmsumuhs (ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, ppc_avr_t *c) |
|
2198 |
{ |
|
2199 |
uint32_t prod[8]; |
|
2200 |
int i; |
|
2201 |
int sat = 0; |
|
2202 |
|
|
2203 |
for (i = 0; i < ARRAY_SIZE(r->u16); i++) { |
|
2204 |
prod[i] = a->u16[i] * b->u16[i]; |
|
2205 |
} |
|
2206 |
|
|
2207 |
VECTOR_FOR_INORDER_I (i, s32) { |
|
2208 |
uint64_t t = (uint64_t)c->u32[i] + prod[2*i] + prod[2*i+1]; |
|
2209 |
r->u32[i] = cvtuduw(t, &sat); |
|
2210 |
} |
|
2211 |
|
|
2212 |
if (sat) { |
|
2213 |
env->vscr |= (1 << VSCR_SAT); |
|
2214 |
} |
|
2215 |
} |
|
2216 |
|
|
2183 | 2217 |
#define VMUL_DO(name, mul_element, prod_element, evenp) \ |
2184 | 2218 |
void helper_v##name (ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b) \ |
2185 | 2219 |
{ \ |
b/target-ppc/translate.c | ||
---|---|---|
6388 | 6388 |
GEN_VAFORM_PAIRED(vmhaddshs, vmhraddshs, 16) |
6389 | 6389 |
|
6390 | 6390 |
GEN_VAFORM_PAIRED(vmsumubm, vmsummbm, 18) |
6391 |
GEN_VAFORM_PAIRED(vmsumuhm, vmsumuhs, 19) |
|
6391 | 6392 |
GEN_VAFORM_PAIRED(vsel, vperm, 21) |
6392 | 6393 |
|
6393 | 6394 |
/*** SPE extension ***/ |
Also available in: Unified diff