Revision 35cf7c7e target-ppc/op_helper.c
b/target-ppc/op_helper.c | ||
---|---|---|
2220 | 2220 |
#undef VCMP_DO |
2221 | 2221 |
#undef VCMP |
2222 | 2222 |
|
2223 |
void helper_vmaddfp (ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, ppc_avr_t *c) |
|
2224 |
{ |
|
2225 |
int i; |
|
2226 |
for (i = 0; i < ARRAY_SIZE(r->f); i++) { |
|
2227 |
HANDLE_NAN3(r->f[i], a->f[i], b->f[i], c->f[i]) { |
|
2228 |
/* Need to do the computation in higher precision and round |
|
2229 |
* once at the end. */ |
|
2230 |
float64 af, bf, cf, t; |
|
2231 |
af = float32_to_float64(a->f[i], &env->vec_status); |
|
2232 |
bf = float32_to_float64(b->f[i], &env->vec_status); |
|
2233 |
cf = float32_to_float64(c->f[i], &env->vec_status); |
|
2234 |
t = float64_mul(af, cf, &env->vec_status); |
|
2235 |
t = float64_add(t, bf, &env->vec_status); |
|
2236 |
r->f[i] = float64_to_float32(t, &env->vec_status); |
|
2237 |
} |
|
2238 |
} |
|
2239 |
} |
|
2240 |
|
|
2223 | 2241 |
void helper_vmhaddshs (ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, ppc_avr_t *c) |
2224 | 2242 |
{ |
2225 | 2243 |
int sat = 0; |
... | ... | |
2456 | 2474 |
#undef VMUL_DO |
2457 | 2475 |
#undef VMUL |
2458 | 2476 |
|
2477 |
void helper_vnmsubfp (ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, ppc_avr_t *c) |
|
2478 |
{ |
|
2479 |
int i; |
|
2480 |
for (i = 0; i < ARRAY_SIZE(r->f); i++) { |
|
2481 |
HANDLE_NAN3(r->f[i], a->f[i], b->f[i], c->f[i]) { |
|
2482 |
/* Need to do the computation is higher precision and round |
|
2483 |
* once at the end. */ |
|
2484 |
float64 af, bf, cf, t; |
|
2485 |
af = float32_to_float64(a->f[i], &env->vec_status); |
|
2486 |
bf = float32_to_float64(b->f[i], &env->vec_status); |
|
2487 |
cf = float32_to_float64(c->f[i], &env->vec_status); |
|
2488 |
t = float64_mul(af, cf, &env->vec_status); |
|
2489 |
t = float64_sub(t, bf, &env->vec_status); |
|
2490 |
t = float64_chs(t); |
|
2491 |
r->f[i] = float64_to_float32(t, &env->vec_status); |
|
2492 |
} |
|
2493 |
} |
|
2494 |
} |
|
2495 |
|
|
2459 | 2496 |
void helper_vperm (ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, ppc_avr_t *c) |
2460 | 2497 |
{ |
2461 | 2498 |
ppc_avr_t result; |
Also available in: Unified diff