Message ID | 20230808031143.50925-4-richard.henderson@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | tcg: Introduce negsetcond opcodes | expand |
On Tue, 8 Aug 2023 at 04:14, Richard Henderson <richard.henderson@linaro.org> wrote: > > The setcond + neg + and sequence is a complex method of > performing a conditional move. > > Signed-off-by: Richard Henderson <richard.henderson@linaro.org> > --- > target/alpha/translate.c | 7 +++---- > 1 file changed, 3 insertions(+), 4 deletions(-) > > diff --git a/target/alpha/translate.c b/target/alpha/translate.c > index 846f3d8091..0839182a1f 100644 > --- a/target/alpha/translate.c > +++ b/target/alpha/translate.c > @@ -517,10 +517,9 @@ static void gen_fold_mzero(TCGCond cond, TCGv dest, TCGv src) > > case TCG_COND_GE: > case TCG_COND_LT: > - /* For >= or <, map -0.0 to +0.0 via comparison and mask. */ > - tcg_gen_setcondi_i64(TCG_COND_NE, dest, src, mzero); > - tcg_gen_neg_i64(dest, dest); > - tcg_gen_and_i64(dest, dest, src); > + /* For >= or <, map -0.0 to +0.0. */ > + tcg_gen_movcond_i64(TCG_COND_NE, dest, src, tcg_constant_i64(mzero), > + src, tcg_constant_i64(0)); > break; > Reviewed-by: Peter Maydell <peter.maydell@linaro.org> thanks -- PMM
diff --git a/target/alpha/translate.c b/target/alpha/translate.c index 846f3d8091..0839182a1f 100644 --- a/target/alpha/translate.c +++ b/target/alpha/translate.c @@ -517,10 +517,9 @@ static void gen_fold_mzero(TCGCond cond, TCGv dest, TCGv src) case TCG_COND_GE: case TCG_COND_LT: - /* For >= or <, map -0.0 to +0.0 via comparison and mask. */ - tcg_gen_setcondi_i64(TCG_COND_NE, dest, src, mzero); - tcg_gen_neg_i64(dest, dest); - tcg_gen_and_i64(dest, dest, src); + /* For >= or <, map -0.0 to +0.0. */ + tcg_gen_movcond_i64(TCG_COND_NE, dest, src, tcg_constant_i64(mzero), + src, tcg_constant_i64(0)); break; default:
The setcond + neg + and sequence is a complex method of performing a conditional move. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> --- target/alpha/translate.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-)