[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