Message ID | 20190106225035.5671-4-richard.henderson@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | target/arm: Vector expansion improvments. | expand |
On Sun, 6 Jan 2019 at 22:50, Richard Henderson <richard.henderson@linaro.org> wrote: > > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> > --- > target/arm/translate.c | 25 +++++++++++++++++++------ > 1 file changed, 19 insertions(+), 6 deletions(-) > > diff --git a/target/arm/translate.c b/target/arm/translate.c > index 33b1860148..f3f172f384 100644 > --- a/target/arm/translate.c > +++ b/target/arm/translate.c > @@ -6368,6 +6368,25 @@ static int disas_neon_data_insn(DisasContext *s, uint32_t insn) > tcg_gen_gvec_cmp(u ? TCG_COND_GEU : TCG_COND_GE, size, > rd_ofs, rn_ofs, rm_ofs, vec_size, vec_size); > return 0; > + > + case NEON_3R_VMAX: > + if (u) { > + tcg_gen_gvec_umax(size, rd_ofs, rn_ofs, rm_ofs, > + vec_size, vec_size); > + } else { > + tcg_gen_gvec_smax(size, rd_ofs, rn_ofs, rm_ofs, > + vec_size, vec_size); > + } > + return 0; > + case NEON_3R_VMIN: > + if (u) { > + tcg_gen_gvec_umin(size, rd_ofs, rn_ofs, rm_ofs, > + vec_size, vec_size); > + } else { > + tcg_gen_gvec_smin(size, rd_ofs, rn_ofs, rm_ofs, > + vec_size, vec_size); > + } > + return 0; > } > > if (size == 3) { > @@ -6533,12 +6552,6 @@ static int disas_neon_data_insn(DisasContext *s, uint32_t insn) > case NEON_3R_VQRSHL: > GEN_NEON_INTEGER_OP_ENV(qrshl); > break; > - case NEON_3R_VMAX: > - GEN_NEON_INTEGER_OP(max); > - break; > - case NEON_3R_VMIN: > - GEN_NEON_INTEGER_OP(min); > - break; > case NEON_3R_VABD: > GEN_NEON_INTEGER_OP(abd); > break; > -- This leaves the helpers neon_max_[su]{8,16} unused and deletable, I think? neon_max_[su]32 is used only via the #defines of neon_pmax_[su]32 so could be renamed to pmax. Similarly min/pmin. thanks -- PMM
On Tue, 8 Jan 2019 at 18:14, Peter Maydell <peter.maydell@linaro.org> wrote: > > On Sun, 6 Jan 2019 at 22:50, Richard Henderson > <richard.henderson@linaro.org> wrote: > > > > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> > > --- > > target/arm/translate.c | 25 +++++++++++++++++++------ > > 1 file changed, 19 insertions(+), 6 deletions(-) > > > > diff --git a/target/arm/translate.c b/target/arm/translate.c > > index 33b1860148..f3f172f384 100644 > > --- a/target/arm/translate.c > > +++ b/target/arm/translate.c > > @@ -6368,6 +6368,25 @@ static int disas_neon_data_insn(DisasContext *s, uint32_t insn) > > tcg_gen_gvec_cmp(u ? TCG_COND_GEU : TCG_COND_GE, size, > > rd_ofs, rn_ofs, rm_ofs, vec_size, vec_size); > > return 0; > > + > > + case NEON_3R_VMAX: > > + if (u) { > > + tcg_gen_gvec_umax(size, rd_ofs, rn_ofs, rm_ofs, > > + vec_size, vec_size); > > + } else { > > + tcg_gen_gvec_smax(size, rd_ofs, rn_ofs, rm_ofs, > > + vec_size, vec_size); > > + } > > + return 0; > > + case NEON_3R_VMIN: > > + if (u) { > > + tcg_gen_gvec_umin(size, rd_ofs, rn_ofs, rm_ofs, > > + vec_size, vec_size); > > + } else { > > + tcg_gen_gvec_smin(size, rd_ofs, rn_ofs, rm_ofs, > > + vec_size, vec_size); > > + } > > + return 0; > > } > > > > if (size == 3) { > > @@ -6533,12 +6552,6 @@ static int disas_neon_data_insn(DisasContext *s, uint32_t insn) > > case NEON_3R_VQRSHL: > > GEN_NEON_INTEGER_OP_ENV(qrshl); > > break; > > - case NEON_3R_VMAX: > > - GEN_NEON_INTEGER_OP(max); > > - break; > > - case NEON_3R_VMIN: > > - GEN_NEON_INTEGER_OP(min); > > - break; > > case NEON_3R_VABD: > > GEN_NEON_INTEGER_OP(abd); > > break; > > -- > > This leaves the helpers neon_max_[su]{8,16} unused and deletable, > I think? neon_max_[su]32 is used only via the #defines of > neon_pmax_[su]32 so could be renamed to pmax. Similarly min/pmin. ...but if you wanted to do the cleanup in a followon patch you can have Reviewed-by: Peter Maydell <peter.maydell@linaro.org> on this one. thanks -- PMM
diff --git a/target/arm/translate.c b/target/arm/translate.c index 33b1860148..f3f172f384 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -6368,6 +6368,25 @@ static int disas_neon_data_insn(DisasContext *s, uint32_t insn) tcg_gen_gvec_cmp(u ? TCG_COND_GEU : TCG_COND_GE, size, rd_ofs, rn_ofs, rm_ofs, vec_size, vec_size); return 0; + + case NEON_3R_VMAX: + if (u) { + tcg_gen_gvec_umax(size, rd_ofs, rn_ofs, rm_ofs, + vec_size, vec_size); + } else { + tcg_gen_gvec_smax(size, rd_ofs, rn_ofs, rm_ofs, + vec_size, vec_size); + } + return 0; + case NEON_3R_VMIN: + if (u) { + tcg_gen_gvec_umin(size, rd_ofs, rn_ofs, rm_ofs, + vec_size, vec_size); + } else { + tcg_gen_gvec_smin(size, rd_ofs, rn_ofs, rm_ofs, + vec_size, vec_size); + } + return 0; } if (size == 3) { @@ -6533,12 +6552,6 @@ static int disas_neon_data_insn(DisasContext *s, uint32_t insn) case NEON_3R_VQRSHL: GEN_NEON_INTEGER_OP_ENV(qrshl); break; - case NEON_3R_VMAX: - GEN_NEON_INTEGER_OP(max); - break; - case NEON_3R_VMIN: - GEN_NEON_INTEGER_OP(min); - break; case NEON_3R_VABD: GEN_NEON_INTEGER_OP(abd); break;
Signed-off-by: Richard Henderson <richard.henderson@linaro.org> --- target/arm/translate.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) -- 2.17.2