Revision b04ae981

b/target-ppc/helper.h
165 165
DEF_HELPER_2(vupkhsh, void, avr, avr)
166 166
DEF_HELPER_2(vupklsb, void, avr, avr)
167 167
DEF_HELPER_2(vupklsh, void, avr, avr)
168
DEF_HELPER_4(vmsumubm, void, avr, avr, avr, avr)
169
DEF_HELPER_4(vmsummbm, void, avr, avr, avr, avr)
168 170

  
169 171
DEF_HELPER_1(efscfsi, i32, i32)
170 172
DEF_HELPER_1(efscfui, i32, i32)
b/target-ppc/op_helper.c
2093 2093
#undef MRGHI
2094 2094
#undef MRGLO
2095 2095

  
2096
void helper_vmsummbm (ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, ppc_avr_t *c)
2097
{
2098
    int32_t prod[16];
2099
    int i;
2100

  
2101
    for (i = 0; i < ARRAY_SIZE(r->s8); i++) {
2102
        prod[i] = (int32_t)a->s8[i] * b->u8[i];
2103
    }
2104

  
2105
    VECTOR_FOR_INORDER_I(i, s32) {
2106
        r->s32[i] = c->s32[i] + prod[4*i] + prod[4*i+1] + prod[4*i+2] + prod[4*i+3];
2107
    }
2108
}
2109

  
2110
void helper_vmsumubm (ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b, ppc_avr_t *c)
2111
{
2112
    uint16_t prod[16];
2113
    int i;
2114

  
2115
    for (i = 0; i < ARRAY_SIZE(r->u8); i++) {
2116
        prod[i] = a->u8[i] * b->u8[i];
2117
    }
2118

  
2119
    VECTOR_FOR_INORDER_I(i, u32) {
2120
        r->u32[i] = c->u32[i] + prod[4*i] + prod[4*i+1] + prod[4*i+2] + prod[4*i+3];
2121
    }
2122
}
2123

  
2096 2124
#define VMUL_DO(name, mul_element, prod_element, evenp)                 \
2097 2125
    void helper_v##name (ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)      \
2098 2126
    {                                                                   \
b/target-ppc/translate.c
6376 6376
        tcg_temp_free_ptr(rd);                                          \
6377 6377
    }
6378 6378

  
6379
GEN_VAFORM_PAIRED(vmsumubm, vmsummbm, 18)
6380

  
6379 6381
/***                           SPE extension                               ***/
6380 6382
/* Register moves */
6381 6383

  

Also available in: Unified diff