On Fri, 30 Apr 2021 at 21:36, Richard Henderson <richard.hender...@linaro.org> wrote: > > Signed-off-by: Richard Henderson <richard.hender...@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.mayd...@linaro.org> thanks -- PMM