On 12/23/18 10:38 PM, Mark Cave-Ayland wrote:
> -#define VMUL_DO(name, mul_element, prod_element, cast, evenp)           \
> +#define VMUL_DO_EVN(name, mul_element, mul_access, prod_access, cast)   \
>      void helper_v##name(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)       \
>      {                                                                   \
>          int i;                                                          \
>                                                                          \
> +        for (i = 0; i < ARRAY_SIZE(r->mul_element); i += 2) {           \
> +            r->prod_access(i >> 1) = (cast)a->mul_access(i) *           \
> +                                     (cast)b->mul_access(i);            \
> +        }                                                               \
> +    }
> +
> +#define VMUL_DO_ODD(name, mul_element, mul_access, prod_access, cast)   \
> +    void helper_v##name(ppc_avr_t *r, ppc_avr_t *a, ppc_avr_t *b)       \
> +    {                                                                   \
> +        int i;                                                          \
> +                                                                        \
> +        for (i = 0; i < ARRAY_SIZE(r->mul_element); i += 2) {           \
> +            r->prod_access(i >> 1) = (cast)a->mul_access(i + 1) *       \
> +                                     (cast)b->mul_access(i + 1);        \
>          }                                                               \
>      }

FWIW,

  for (i = odd; i < ARRAY_SIZE; i += 2) {
    r->pacc(i >> 1) = (cast)a->macc(i) * b->macc(i);
  }

is sufficient to unify these two.  But what you have isn't wrong.

Reviewed-by: Richard Henderson <richard.hender...@linaro.org>


r~

Reply via email to