[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 20/31] target/arm: Implement SVE2 complex integer add
From: |
Laurent Desnogues |
Subject: |
Re: [PATCH 20/31] target/arm: Implement SVE2 complex integer add |
Date: |
Mon, 13 Apr 2020 18:20:27 +0200 |
On Fri, Mar 27, 2020 at 12:20 AM Richard Henderson
<address@hidden> wrote:
[...]
> diff --git a/target/arm/sve_helper.c b/target/arm/sve_helper.c
> index b5afa34efe..a3653007ac 100644
> --- a/target/arm/sve_helper.c
> +++ b/target/arm/sve_helper.c
> @@ -1289,6 +1289,48 @@ DO_BITPERM(sve2_bgrp_d, uint64_t, bitgroup)
>
> #undef DO_BITPERM
>
> +#define DO_CADD(NAME, TYPE, H, ADD_OP, SUB_OP) \
> +void HELPER(NAME)(void *vd, void *vn, void *vm, uint32_t desc) \
> +{ \
> + intptr_t i, opr_sz = simd_oprsz(desc); \
> + int sub_r = simd_data(desc); \
> + if (sub_r) { \
> + for (i = 0; i < opr_sz; i += 2 * sizeof(TYPE)) { \
> + TYPE acc_r = *(TYPE *)(vn + H(i)); \
> + TYPE acc_i = *(TYPE *)(vn + H(i + sizeof(TYPE))); \
> + TYPE el2_r = *(TYPE *)(vm + H(i)); \
> + TYPE el2_i = *(TYPE *)(vm + H(i + sizeof(TYPE))); \
> + acc_r = SUB_OP(acc_r, el2_i); \
> + acc_i = ADD_OP(acc_i, el2_r); \
> + *(TYPE *)(vd + H(i)) = acc_r; \
> + *(TYPE *)(vd + H(i + sizeof(TYPE))) = acc_i; \
> + } \
> + } else { \
> + for (i = 0; i < opr_sz; i += 2 * sizeof(TYPE)) { \
> + TYPE acc_r = *(TYPE *)(vn + H(i)); \
> + TYPE acc_i = *(TYPE *)(vn + H(i + sizeof(TYPE))); \
> + TYPE el2_r = *(TYPE *)(vm + H(i)); \
> + TYPE el2_i = *(TYPE *)(vm + H(i + sizeof(TYPE))); \
> + acc_r = ADD_OP(acc_r, el2_i); \
> + acc_i = SUB_OP(acc_i, el2_r); \
> + *(TYPE *)(vd + H(i)) = acc_r; \
> + *(TYPE *)(vd + H(i + sizeof(TYPE))) = acc_i; \
> + } \
> + } \
> +}
The then/else branches of if (sub_r) are swapped.
Laurent
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [PATCH 20/31] target/arm: Implement SVE2 complex integer add,
Laurent Desnogues <=