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

Ilia Mirkin imirkin at alum.mit.edu
Thu May 29 12:58:14 PDT 2014


How did you test this? I'm like 99% sure it's wrong. (But I'm avoiding
saying how it's wrong so that you don't just fix it to match what I
say, but instead work it out yourself by doing the tests that you
should have been doing in the first place. Or prove me wrong.)

On Thu, May 29, 2014 at 3:43 PM, Tobias Klausmann
<tobias.johannes.klausmann at mni.thm.de> wrote:
> Signed-off-by: Tobias Klausmann <tobias.johannes.klausmann at mni.thm.de>
> ---
>  src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp | 14 ++++++++++++++
>  1 file changed, 14 insertions(+)
>
> diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp
> index 68b9a6d..a56756c 100644
> --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp
> +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp
> @@ -556,6 +556,20 @@ ConstantFolding::expr(Instruction *i,
>        }
>        break;
>     }
> +   case OP_BFIND: {
> +      int shift = 0;
> +      if (i->subOp == NV50_IR_SUBOP_BFIND_SAMT)
> +         shift = 32 - (b->data.u32 & 0xff);
> +      switch (i->dType) {
> +      case TYPE_S32:
> +         res.data.s32 = util_last_bit_signed(a->data.s32 >> shift)- 1; break;
> +      case TYPE_U32:
> +         res.data.u32 = util_last_bit(a->data.u32 >> shift) -1; break;
> +      default:
> +         return;
> +      }
> +      break;
> +   }
>     default:
>        return;
>     }
> --
> 1.8.4.5
>


More information about the Nouveau mailing list