[Nouveau] [PATCH v2 3/4] nvc0/ir: Handle OP_BFIND when folding constant expressions

Ilia Mirkin imirkin at alum.mit.edu
Tue Jun 3 14:05:08 PDT 2014


On Tue, Jun 3, 2014 at 4:58 PM, Tobias Klausmann
<tobias.johannes.klausmann at mni.thm.de> wrote:
> Signed-off-by: Tobias Klausmann <tobias.johannes.klausmann at mni.thm.de>
> ---
>  .../drivers/nouveau/codegen/nv50_ir_peephole.cpp       | 18 ++++++++++++++++++
>  1 file changed, 18 insertions(+)
>
> diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp
> index a214ffc..c497335 100644
> --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp
> +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp
> @@ -948,6 +948,24 @@ ConstantFolding::opnd(Instruction *i, ImmediateValue &imm0, int s)
>     case OP_EX2:
>        unary(i, imm0);
>        break;
> +   case OP_BFIND: {
> +      int32_t res;
> +      switch (i->dType) {
> +      case TYPE_S32:
> +         res = util_last_bit_signed(imm0.reg.data.s32) - 1; break;

The style elsewhere is to do

case TYPE_S32: foo; break;

if it fits. Otherwise put the break on a separate line.

> +      case TYPE_U32:
> +         res = util_last_bit(imm0.reg.data.u32) -1; break;

Missing space between "-" and "1".

> +      default:
> +         return;
> +      }
> +      if ((i->subOp ==  NV50_IR_SUBOP_BFIND_SAMT) && (res >= 0))

No need for the extra parens. && comes after ==.

> +         res = 31 - res;
> +      i->setSrc(0, new_ImmediateValue(i->bb->getProgram(), (uint32_t)res));

Why the typecast?

> +      i->setSrc(1, NULL);
> +      i->op = OP_MOV;
> +      i->subOp = 0;
> +      break;
> +   }
>     default:
>        return;
>     }
> --
> 1.8.4.5
>


More information about the Nouveau mailing list