[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
[PATCH 1/6] target/ppc: add byte-reverse br[dwh] instructions, Lijun Pan, 2020/06/13
[PATCH 5/6] fix the prototype of muls64/mulu64, Lijun Pan, 2020/06/13
[PATCH 4/6] target/ppc: add vmulh{su}d instructions, Lijun Pan, 2020/06/13
[PATCH 6/6] target/ppc: add vdiv{su}{wd} vmod{su}{wd} instructions, Lijun Pan, 2020/06/13