qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 3/6] targetc/ppc: add vmulh{su}w instructions


From: Lijun Pan
Subject: Re: [PATCH 3/6] targetc/ppc: add vmulh{su}w instructions
Date: Fri, 19 Jun 2020 00:37:45 -0500


> On Jun 18, 2020, at 6:29 PM, Richard Henderson <richard.henderson@linaro.org> 
> wrote:
> 
> On 6/12/20 9:20 PM, Lijun Pan wrote:
>> +#define VMULH_DO(name, op, element, cast_orig, cast_temp)           \
>> +    void helper_vmulh##name(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)       
>> \
>> +    {                                                                       
>> \
>> +    int i;                                                          \
>> +                                                                    \
>> +    for (i = 0; i < ARRAY_SIZE(r->element); i++) {                  \
>> +            r->element[i] = (cast_orig)(((cast_temp)a->element[i] op \
>> +                            (cast_temp)b->element[i]) >> 32);       \
>> +    }                                                               \
>> +    }
>> +VMULH_DO(sw, *, s32, int32_t, int64_t)
>> +VMULH_DO(uw, *, u32, uint32_t, uint64_t)
>> +#undef VMULH_DO
> 
> There's no point in calling the macro "VMUL" and then passing in "op" as a
> parameter.  Just inline the multiply directly.

Do you mean writing two functions directly, 

void helper_vmulhsw(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
{
    int i;

    for (i = 0; i < 4; i++) {
        r->s32[i] = (int32_t)((int64_t)a->s32[i] * (int64_t)b->s32[i]) >> 32);
    }
}

void helper_vmulhuw(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)
{
    int i;

    for (i = 0; i < 4; i++) {
        r->u32[i] = (uint32_t)((uint64_t)a->u32[i] * (uint64_t)b->u32[i]) >> 
32);
    }
}

Thanks,
Lijun


reply via email to

[Prev in Thread] Current Thread [Next in Thread]