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