From ccf004837ae36d298231b511643628e50c566cce Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Tue, 28 Mar 2023 23:31:20 -0500 Subject: [PATCH] nouveau/mme: Use ADD for ine with an immediate Part-of: --- src/nouveau/mme/mme_fermi_builder.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/nouveau/mme/mme_fermi_builder.c b/src/nouveau/mme/mme_fermi_builder.c index 4c484db..f5fad85 100644 --- a/src/nouveau/mme/mme_fermi_builder.c +++ b/src/nouveau/mme/mme_fermi_builder.c @@ -469,6 +469,23 @@ mme_fermi_end_cf(struct mme_builder *b, enum mme_cf_type type) return cf; } +static struct mme_value +mme_fermi_neq(struct mme_builder *b, struct mme_value x, struct mme_value y) +{ + struct mme_fermi_builder *fb = &b->fermi; + + /* Generate some value that's non-zero if x != y */ + struct mme_value res = mme_alloc_reg(b); + if (x.type == MME_VALUE_TYPE_IMM && is_int18(-x.imm)) { + mme_fermi_add_imm18(fb, res, y, -x.imm); + } else if (y.type == MME_VALUE_TYPE_IMM && is_int18(-y.imm)) { + mme_fermi_add_imm18(fb, res, x, -y.imm); + } else { + mme_xor_to(b, res, x, y); + } + return res; +} + void mme_fermi_start_if(struct mme_builder *b, enum mme_cmp_op op, @@ -483,7 +500,7 @@ mme_fermi_start_if(struct mme_builder *b, } else if (mme_is_zero(y)) { mme_fermi_start_cf(b, MME_CF_TYPE_IF, x, if_true); } else { - struct mme_value tmp = mme_xor(b, x, y); + struct mme_value tmp = mme_fermi_neq(b, x, y); mme_fermi_start_cf(b, MME_CF_TYPE_IF, tmp, if_true); mme_free_reg(b, tmp); } @@ -528,7 +545,7 @@ mme_fermi_end_while(struct mme_builder *b, } else if (mme_is_zero(y)) { mme_fermi_end_while_zero(b, x, if_true); } else { - struct mme_value tmp = mme_xor(b, x, y); + struct mme_value tmp = mme_fermi_neq(b, x, y); mme_fermi_end_while_zero(b, tmp, if_true); mme_free_reg(b, tmp); } -- 2.7.4