qemu-devel
[Top][All Lists]
Advanced

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

Re: [PATCH v6 09/82] target/arm: Implement SVE2 saturating add/subtract


From: Peter Maydell
Subject: Re: [PATCH v6 09/82] target/arm: Implement SVE2 saturating add/subtract (predicated)
Date: Tue, 11 May 2021 10:07:12 +0100

On Fri, 30 Apr 2021 at 21:36, Richard Henderson
<richard.henderson@linaro.org> wrote:
>
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
> ---
>  target/arm/helper-sve.h    |  54 +++++++++++
>  target/arm/sve.decode      |  11 +++
>  target/arm/sve_helper.c    | 194 ++++++++++++++++++++++++++-----------
>  target/arm/translate-sve.c |   7 ++
>  4 files changed, 210 insertions(+), 56 deletions(-)
>

> diff --git a/target/arm/sve_helper.c b/target/arm/sve_helper.c
> index 7cc559d950..12a2078edb 100644
> --- a/target/arm/sve_helper.c
> +++ b/target/arm/sve_helper.c
> @@ -678,6 +678,135 @@ DO_ZPZZ(sve2_uhsub_zpzz_h, uint16_t, H1_2, DO_HSUB_BHS)
>  DO_ZPZZ(sve2_uhsub_zpzz_s, uint32_t, H1_4, DO_HSUB_BHS)
>  DO_ZPZZ_D(sve2_uhsub_zpzz_d, uint64_t, DO_HSUB_D)
>
> +static inline int32_t do_sat_bhs(int64_t val, int64_t min, int64_t max)
> +{
> +    return val >= max ? max : val <= min ? min : val;
> +}
> +
> +#define DO_SQADD_B(n, m) do_sat_bhs((int64_t)n + m, INT8_MIN, INT8_MAX)
> +#define DO_SQADD_H(n, m) do_sat_bhs((int64_t)n + m, INT16_MIN, INT16_MAX)
> +#define DO_SQADD_S(n, m) do_sat_bhs((int64_t)n + m, INT32_MIN, INT32_MAX)
> +
> +static inline int64_t do_sqadd_d(int64_t n, int64_t m)
> +{
> +    int64_t r = n + m;
> +    if (((r ^ n) & ~(n ^ m)) < 0) {
> +        /* Signed overflow.  */
> +        return r < 0 ? INT64_MAX : INT64_MIN;
> +    }
> +    return r;
> +}
> +
> +DO_ZPZZ(sve2_sqadd_zpzz_b, int8_t, H1_2, DO_SQADD_B)

H1_2...

Otherwise

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>

thanks
-- PMM



reply via email to

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